0

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

我不知道在哪里可以找到有关准备语句失败的原因的信息。有什么方法可以了解准备过程以了解它失败的原因吗?我所有的问题都是在交易开放时出现的。

对不起,缺乏细节,但我真的无法确定为什么会发生这种情况。

4

4 回答 4

1

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

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

请记住,在实际 SQL 之前,您需要先在查询中定义和说明 db 连接。

请记住在反引号转义中包含表名、列名和值数据。

于 2009-05-30T21:32:35.790 回答
0

准备好的语句示例
$result = $db->query( 'INSERT INTO server (key, value) VALUES (:key, :value)', array('key' => $foo, 'value' => $bar)

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

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

于 2009-05-30T20:00:17.627 回答
0

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

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

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

于 2009-06-01T12:10:04.713 回答
0

如果你正在做这样的事情

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

然后您可以检查mysqli::$error next 以查看有关 prepare() 失败原因的有用错误

print_r($mysqli->error);
于 2017-08-15T01:32:32.430 回答