在准备查询时,检查($ stmt = $ mysqli-> prepare($ query))是否为false有多重要?

时间:2010-12-04 04:15:41

标签: php mysql mysqli prepared-statement

当连接数据库时出现问题,这只是一个问题吗? (我确实检查数据库连接是否成功)。假设我做了足够的检查以确保我的查询始终有效,是否可以跳过以下检查:

if($ stmt = $ db-> prepare($ query)) {    //更多代码 }

而只是做:

$ stmt = $ db-> prepare($ query); //更多代码

我认为事务可能可以做到这一点,但是我的数据库表不支持事务(我使用的是MyISAM,因为我做的数据读取比写入要多得多)。

谢谢!

1 个答案:

答案 0 :(得分:1)

Tandu在这里提供了一个严重误导性的概念,你不幸接受了这个概念。

无论您使用的是什么数据库抽象层(您使用的是mysqli),它实际上都依赖于是否模拟准备好的查询,或者它是否在数据库级别本机运行。如果底层数据库引擎无法“准备”它,那么准备好的查询可以而且应该失败。

它与您的数据库连接是否成功无关。

你绝对应该检查prepare()调用的返回值。如果您有编程错误,它将失败。如果您有其他级别的应用程序问题,它将失败。等等。这是返回值的全部要点。

如果你认为它总是好的,你就会冒失败的查询,这会导致数据丢失 - 可能更多。

要明确说明,每次查询失败时都要检查结果。你不知道...因此总是如此。