这是一个可怕的问题,因为我没有简单的方法来重现它。但是,我正在使用Zend Framework连接到OS X上的MySQL数据库。有时在mysqli对象上调用prepare函数会返回null。 prepare函数的声明返回值为false或语句对象。
我无法弄清楚在哪里寻找有关为什么准备语句失败的信息。有没有办法让我们了解准备过程,看看它失败的原因?当交易开放时,我的所有问题都会出现。
很抱歉没有具体细节,但我真的无法确定为什么会发生这种情况。
答案 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);