2010-04-08 98 views
0

我有一个SQL更新语句,我从PHP程序中运行。它准备好然后执行。当我在PHP中运行它时,它报告违反约束。当我从命令行运行完全相同的语句时(我通过dBug()获取),它的工作原理没有错误。这听起来不可能,所以我一直在寻找这些陈述之间的差异。我能看到的唯一的事情是,当我用一系列参数执行它时,它们都显示为字符,当有些应该是整数时。在代码中运行的SQL与MySQL命令行有什么区别吗?

任何建议去哪里看?

这里是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); 
+0

了解如何在PHP代码中构建SQL字符串可能有助于发现问题。 – webbiedave 2010-04-08 16:57:38

+0

你用什么来准备SQL?根据你的参数编写声明时可能会有差异。 – 2010-04-08 17:00:34

回答

0

嘛,讨厌这样说,但问题是我的复制和粘贴。我正在使用dBug来显示数值和睡眠状态,以便在阅读它们时暂停,但由于无法复制和粘贴,我必须重新输入查询。我错写了其中一个值。感谢您的努力,但像往常一样:操作员错误。

1

也许PHP客户端和客户端MySQL使用不同的字符集。

不具有在客户端的字符表中对应的用户输入的数据可能会转换成?????这可能违反约束:

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

--- 
????? 

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

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

1

声音不太可能 - 变量绑定后正在运行的SQL可能存在一些差异。启用通用查询日志并比较两种情况下执行的语句版本。

C.

+0

我无法启用一般查询日志而无需重新启动,我可以吗?现在,我无法重新启动。如果我没有成功,我会稍后尝试。 – MJB 2010-04-08 17:17:43

相关问题