我有两个使用相同代码的环境。这两个环境没有完美匹配(我无法立即做到这一点)。尽管两个表中的数据相同,但它在一个中工作正常但在另一个中失败。我试过搞乱格式化一些,通常会创建比我解决的更多错误。一个运行5.0.95 mysql,另一个运行5.5.29。我错过了两者之间的语法差异是什么,我怎么能用两者来投诉?
// Code I can easily edit for reasons starts here
$sql = <<< SQL
SELECT WIDGET FROM TABLE WHERE FOO=:foo AND BAR=binary(:bar);
SQL;
// Code I can easily edit for reasons ends here
// Code I can't reliably mess with for reasons starts here
$db = pdo_dbopen();
$pdo = $db->prepare( $sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY) );
$pdo->bindValue(":foo", "kitten");
$pdo->bindValue(":bar", "hugs");
print_r($pdo); // First Print
$pdo->execute();
$my_info = $pdo->fetch(PDO::FETCH_ASSOC);
print_r($my_info); // Second Print
我不能将print_r放在另一台服务器上,但是在无法运行的服务器上(在First Point),显示...
PDOStatement Object([queryString]=> SELECT WIDGET FROM TABLE WHERE FOO=:foo AND BAR=binary(:bar);)
对于第二次打印,我只得到一个空的结果,尽管确认了phpmyadmin中的值。
我觉得也许应该填充绑定值,我不知道为什么它不是在一个版本中而是在另一个版本中?
答案 0 :(得分:0)
终于找到了我的问题的解决方案(感谢所有帮助过的人)。解决方案实际上很奇怪......
首先,我必须深入了解错误检查。我不得不打开实际评估查询的日志记录。
(见这里:How to enable MySQL Query Log? - 特别是Alexandre Marcondes的答案......似乎有助于实际设置值,而在phpadmin中的数据库本身而不是家庭SQL ...可能是安慰剂效果虽然制作我认为)。
检查数据库,其中一个正在将查询评估为
SELECT WIDGET FROM TABLE WHERE FOO="kitten" AND BAR=binary("hugs");
另一个是将查询评估为
SELECT WIDGET FROM TABLE WHERE FOO=\"kitten\" AND BAR=binary(\"hugs\");
为查询中的变量设置单引号的双引号修复问题...很奇怪,但现在问题已解决。显然有一个奇怪的设置埋没在Apache / PHP / mySQL中导致它。