我在这里有一个非常奇怪的问题 - 这是 PDO 不能返回
我可以通过 phpmyadmin 将此查询直接提供给数据库:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | FROM (( (SELECT 'Key' AS tradeOrigin, CONCAT(skti.tier, ' ', skty.type) AS trade, CONCAT('Amount: ', t.sourceKeyAmount) AS tradeInfo, 'Platinum' AS tradeToOrigin, t.destinationPlatinum AS tradeTo, '' AS tradeToInfo, u.ingame AS seller, DAYSPASSED(added) AS daysPassed, DATEDIFF(NOW(), added) AS sortingSince FROM trades t JOIN users u ON t.sourceItem = 1 AND t.destinationItem = 1 AND t.userId = u.userId AND t.sourceModId = 18 JOIN keytiers skti ON t.sourceKeyTierId = skti.keyTierId JOIN keytypes skty ON t.sourceKeyTypeId = skty.keyTypeId) UNION ALL (SELECT 'Mod' AS tradeOrigin, sm.name AS trade, CONCAT('Level: ', IF(t.sourceModLevel = 0, 'Unranked', t.sourceModLevel)) AS tradeInfo, 'Platinum' AS tradeToOrigin, t.destinationPlatinum AS tradeTo, '' AS tradeToInfo, u.ingame AS seller, DAYSPASSED(added) AS daysPassed, DATEDIFF(NOW(), added) AS sortingSince FROM trades t JOIN users u ON t.sourceItem = 2 AND t.destinationItem = 1 AND t.userId = u.userId AND t.sourceModId = 18 JOIN mods sm ON t.sourceModId = sm.modId)) AS derived) |
它将按预期返回一行,列
但是当它需要通过我的框架时会出错。
执行代码:
2 3 4 5 | try { echo $sql."[cc lang="php"]"; print_r($dataArray); echo" |
";
$numrows = $dbh->num_rows($sql, $dataArray);
} 捕捉(PDOException $ex){
// 回声 $ex;
错误($前);
}
//...
[/cc]
输出:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | CONCAT(skti.tier, ' ', skty.type) AS trade, CONCAT('Amount: ', t.sourceKeyAmount) AS tradeInfo, 'Platinum' AS tradeToOrigin, t.destinationPlatinum AS tradeTo, '' AS tradeToInfo, u.ingame AS seller, DAYSPASSED(added) AS daysPassed, DATEDIFF(NOW(), added) AS sortingSince FROM trades t JOIN users u ON t.sourceItem = 1 AND t.destinationItem = 1 AND t.userId = u.userId AND t.sourceModId = :modId JOIN keytiers skti ON t.sourceKeyTierId = skti.keyTierId JOIN keytypes skty ON t.sourceKeyTypeId = skty.keyTypeId) UNION ALL (SELECT 'Mod' AS tradeOrigin, sm.name AS trade, CONCAT('Level: ', IF(t.sourceModLevel = 0, 'Unranked', t.sourceModLevel)) AS tradeInfo, 'Platinum' AS tradeToOrigin, t.destinationPlatinum AS tradeTo, '' AS tradeToInfo, u.ingame AS seller, DAYSPASSED(added) AS daysPassed, DATEDIFF(NOW(), added) AS sortingSince FROM trades t JOIN users u ON t.sourceItem = 2 AND t.destinationItem = 1 AND t.userId = u.userId AND t.sourceModId = :modId JOIN mods sm ON t.sourceModId = sm.modId) |
2 3 4 | ( [:modId] => 18 ) |
这进入(注意:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 | * Returns the number of rows that this query has. * * @param type $query The input query * @param type $values The values * @return type Number of rows */ public function num_rows($query, $values) { $newquery ="SELECT COUNT(*) AS count FROM (({$query}) AS derived)"; echo $newquery; $statement = $this->query($newquery, $values); $i = $statement->fetch(); echo"[cc lang="php"]"; print_r($i); echo" |
";
返回$i->count;
}
[/cc]
它回响:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | FROM (( (SELECT 'Key' AS tradeOrigin, CONCAT(skti.tier, ' ', skty.type) AS trade, CONCAT('Amount: ', t.sourceKeyAmount) AS tradeInfo, 'Platinum' AS tradeToOrigin, t.destinationPlatinum AS tradeTo, '' AS tradeToInfo, u.ingame AS seller, DAYSPASSED(added) AS daysPassed, DATEDIFF(NOW(), added) AS sortingSince FROM trades t JOIN users u ON t.sourceItem = 1 AND t.destinationItem = 1 AND t.userId = u.userId AND t.sourceModId = :modId JOIN keytiers skti ON t.sourceKeyTierId = skti.keyTierId JOIN keytypes skty ON t.sourceKeyTypeId = skty.keyTypeId) UNION ALL (SELECT 'Mod' AS tradeOrigin, sm.name AS trade, CONCAT('Level: ', IF(t.sourceModLevel = 0, 'Unranked', t.sourceModLevel)) AS tradeInfo, 'Platinum' AS tradeToOrigin, t.destinationPlatinum AS tradeTo, '' AS tradeToInfo, u.ingame AS seller, DAYSPASSED(added) AS daysPassed, DATEDIFF(NOW(), added) AS sortingSince FROM trades t JOIN users u ON t.sourceItem = 2 AND t.destinationItem = 1 AND t.userId = u.userId AND t.sourceModId = :modId JOIN mods sm ON t.sourceModId = sm.modId)) AS derived) |
2 3 4 | ( [count] => 0 ) |
调用:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | * Can be called to create a query. Use either unnamed or named placeholders for the prepared statements. * * Example: $dbh->query("INSERT INTO table (data1, data2) VALUES(?, ?)", array($data1, $data2)); * * @param type $query The input query, including unnamed or named placeholders * @param type $values The input values. If it's not an array, then it will be an one-element array * @return type The statement constructed by this query */ public function query($query, $values = array()) { if (!is_array($values)) { $values = array($values); } $statement = $this->dbh->prepare($query); $statement->setFetchMode(PDO::FETCH_OBJ); if (is_assoc($values)) { foreach ($values as $key => $value) { $statement->bindValue($key, $value); } } else { $i = 1; foreach ($values as $value) { $statement->bindValue($i++, $value); } } $statement->execute(); return $statement; } |
我真的被困在这里,不知道发生了什么,请帮帮我。
更新:
显然是一个设置将我引入了这个问题:
但是我仍然想知道它为什么会导致问题,因为我不能只是禁用它,因为我将它用于
你试过用
因为结果不同,Sql本身没有问题,但问题要么出在values上,要么出在bind上。
根据评论中的讨论,您现在似乎掌握了足够的信息:您的 PDO 设置正在阻止您的绑定工作。
您说您正在使用该设置来使 LIMIT 工作 - 我猜想专门绑定到 LIMIT。您通常不能这样做,因为绑定仅用于参数值(即在
最后,根据评论,确保您使用的任何别名都是小写的,并且不是保留字。您可能可以不区分大小写地使用这些,但无论如何都有代码约定是好的!
我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.
我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时
我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin
我在我的rails应用程序中安装了来自github.com的acts_as_versioned插件,但有一段代码我不完全理解,我希望有人能帮我解决这个问题class_eval我知道block内的方法(或任何它是什么)被定义为类内的实例方法,但我在插件的任何地方都找不到定义为常量的CLASS_METHODS,而且我也不确定是什么here,并且有问题的代码从lib/acts_as_versioned.rb的第199行开始。如果有人愿意告诉我这里的内幕,我将不胜感激。谢谢-C 最佳答案 这是一个异端。http://en.wikipedia
我在Rails上使用带有ruby的solr。一切正常,我只需要知道是否有任何现有代码来清理用户输入,比如以?开头的查询。或* 最佳答案 我不知道执行此操作的任何代码,但理论上可以通过查看parsingcodeinLucene来完成并搜索thrownewParseException(只有16个匹配!)。在实践中,我认为您最好只捕获代码中的任何solr异常并显示“无效查询”消息或类似信息。编辑:这里有几个“sanitizer”:http://pivotallabs.com/users/zach/blog/articles/937-s
我正在为锦标赛开发一个Rails应用程序。我在这个查询中使用了三个模型:classPlayertruehas_and_belongs_to_many:tournamentsclassTournament:destroyclassPlayerMatch"Player",:foreign_key=>"player_one"belongs_to:player_two,:class_name=>"Player",:foreign_key=>"player_two"在tournaments_controller的显示操作中,我调用以下查询:Tournament.where(:id=>params
我想用sunspot重现以下原始solr查询q=exact_term_text:fooORterm_textv:foo*ORalternate_text:bar*但我无法通过标准的太阳黑子界面理解这是否可能以及如何实现,因为看起来:fulltext方法似乎不接受多个文本/搜索字段参数我不知道将什么参数作为第一个参数传递给fulltext,就好像我通过了"foo"或"bar"结果不匹配如果我传递一个空参数,我得到一个q=*:*范围过滤器(例如with(:term).starting_with('foo*')(顾名思义)作为过滤器查询应用,因此不参与评分。似乎可以手动编写字符串(或者可能使
我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi