在代码中运行的SQL与MySQL命令行之间有什么区别吗?

时间:2010-04-08 16:54:10

标签: php mysql debugging

我有一个SQL更新语句,我在PHP程序中运行。它准备好然后执行。当我在PHP中运行它时,它会报告约束违规。当我从命令行运行完全相同的语句(我通过dBug()获得)时,它没有错误。这听起来不可能,所以我一直在寻找这些陈述之间的差异。我唯一能看到的是,当我用一个参数数组执行它时,它们看起来都是字符,有些应该是整数。

有关何处查看的建议?

这是PHP版本(我稍微调整一下以使其更清晰):

$st =& $db->prepare("update tbl set uid=?, frequency=? other_id=? where id=$id");
$values = array($uid, $freq, $other_id);
$res =& $db->execute($st, $values);
new dBug ($res);

3 个答案:

答案 0 :(得分:1)

PHP客户端和MySQL客户端可能使用不同的字符集。

客户端字符表中没有对应项的用户输入数据可能会转换为可能违反约束的?????

SELECT  CAST('абвгд' AS CHAR CHARSET LATIN1)

---
?????

'абвгд'这里是西里尔字符。

您能否提供一些您试图插入的数据样本以及表格定义?

答案 1 :(得分:1)

听起来不太可能 - 绑定变量后运行的SQL可能会有一些差异。启用常规查询日志并比较两种方案中语句的执行版本。

下进行。

答案 2 :(得分:0)

好吧,讨厌说出来,但问题出在我的复制和粘贴上。我正在使用dBug来显示值,并在我阅读时暂停睡眠,但由于我无法复制和粘贴,因此我必须重新键入查询。我错了其中一个价值观。谢谢你的努力,但像往常一样:操作员错误。