gpt4 book ai didi

php - mySQL 版本之间的语法

转载 作者:行者123 更新时间:2023-11-29 21:20:03 25 4
gpt4 key购买 nike

我有两个环境使用相同的代码。这两个环境并不完美匹配(我无法立即对此采取任何措施)。尽管两个表中都有相同的数据,但它在一个表中工作正常,但在另一个表中失败。我尝试过调整一些格式,通常产生的错误比我解决的错误还要多。一个正在运行 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 放在另一台服务器上,但在不起作用的服务器上(在第一点),显示...

PDOStatement Object([queryString]=> SELECT WIDGET FROM TABLE WHERE FOO=:foo AND BAR=binary(:bar);)

对于第二次打印,尽管确认 phpmyadmin 中存在该值,但我只得到一个空结果。

我觉得也许应该用绑定(bind)值填充,但我不知道为什么它不在一个版本中,而是在另一个版本中?

最佳答案

终于找到了解决我的问题的方法(感谢所有提供帮助的人)。这个解决方案实际上很奇怪......

首先,我必须更深入地进行错误检查。我必须为实际评估的查询打开日志记录。

(请参见此处: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 中埋藏着一个奇怪的设置导致了这个问题。

关于php - mySQL 版本之间的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35760476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com