mysqli-> prepare函数返回null

时间:2009-05-30 19:46:22

标签: php mysql prepared-statement

这是一个可怕的问题,因为我没有简单的方法来重现它。但是,我正在使用Zend Framework连接到OS X上的MySQL数据库。有时在mysqli对象上调用prepare函数会返回null。 prepare函数的声明返回值为false或语句对象。

我无法弄清楚在哪里寻找有关为什么准备语句失败的信息。有没有办法让我们了解准备过程,看看它失败的原因?当交易开放时,我的所有问题都会出现。

很抱歉没有具体细节,但我真的无法确定为什么会发生这种情况。

4 个答案:

答案 0 :(得分:1)

为了纠正ToughPal,您应该使用:

  

mysqli_query($ db,“INSERT INTO table(variable1,variable2)VALUES(hello,mynameis);

请记住,您需要在实际SQL之前首先在查询中定义和声明数据库连接。

请记住将表名,列名和值数据括在反引号转义中。

答案 1 :(得分:0)

示例准备声明
$ result = $ db-> query('INSERT INTO server(key,value)VALUES(:key,:value)',                       数组('key'=> $ foo,'value'=> $ bar)

您能告诉我们您的数据库查询吗?

尝试并使用测试数据执行数据库查询,并查看查询是否正常工作。如果查询正常,那么我们可以查看代码失败的原因。

答案 2 :(得分:0)

好吧,我设法在周末找到了这个问题,但实际上只能解决症状,而不是原因。

我没有在原始问题中包含任何SQL,因为问题是随机发生的,相同的代码有时可以工作,有时也不会。问题看起来像是内存指针问题。每当我遇到问题时,Zend Debugger告诉我我有一个mysqli对象。我相信这是因为否则我在尝试运行prepare函数时会遇到错误。我有一个单独的对象作为我的mysqli连接的容器,但是每当prepare函数失败时,===显示正在使用的mysqli与我的单例对象中的mysqli连接不同。

最后,Zend Framework唯一的问题是,如果prepare函数返回null,它不会失败。如果您看到此问题,请使用===验证连接是否与您之前启动的连接相同。

答案 3 :(得分:0)

如果你正在做这样的事情

$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$query = "...";
$mysqli->prepare($query);

然后您可以检查mysqli::$error旁边是否有关于为什么prepare()失败的有用错误

print_r($mysqli->error);