我对mysqli不太熟悉,我写的是过程风格,而不是面向对象的风格。我知道面向对象的风格的一些好处,但它让我感到困惑,所以我适应它的速度很慢。我的政策是,如果我不能支持它,我就不写它。
所以。。。我有一个简单的函数,其中包含以下内容:
mysqli_query( $DB, "CREATE TABLE $TABLE ( $SCHEMHA )" );
if (mysqli_connect_errno()) {
printf("Connect failed: %s'n", mysqli_connect_error());
exit();
}
查询在创建表时有效,只要我的架构中没有错误。如果我的架构失败,我的条件语句不会捕获失败(因此永远不会调用连接失败消息)。
我哪里出错了?
我的目标是能够在选择性错误时退出/停止/结束。因此,例如,如果一个表已经存在(errno 1050),我很乐意忽略该错误,但是如果出现错误 1072(表中不存在键列"whatever"),我想停止处理。
感谢所有的帮助...
- 您需要检查
mysqli_query
的返回值,以了解查询是成功还是失败。 - 您可以使用
mysqli_errno
获取确切的错误代码。 - 您正在使用的
_connect_
函数在此上下文中无关紧要,它们为您提供有关连接尝试期间发生的错误的信息。
if (!mysqli_query(..)) {
switch (mysqli_errno($DB)) {
case 1072:
...
}
}
mysqli_connect_errno
从连接返回错误。您的错误导致查询,因此请使用mysqli_error。
if (mysqli_error($DB)) {
printf("Errormessage: %s'n", mysqli_error($link));
}
如果您只想检查错误代码,请使用 http://php.net/manual/en/mysqli.errno.php。
printf("Errorcode: %d'n", mysqli_errno($DB));
要检查特定代码,您可以执行以下操作:
if(in_array(mysqli_errno($DB), array(1072, other codes)) {
exit('Bad Code');
} else {
echo 'Still processing...';
}
因此,例如,如果一个表已经存在(errno 1050),我可以忽略该错误,
CREATE TABLE IF NOT EXISTS $TABLE ...
我相信
这样的事情可以:
$result = mysqli_query( $DB, "CREATE TABLE $TABLE ( $SCHEMHA )" );
if (!$result) {
switch(mysqli_connect_error()) {
// Key column 'whatever' doesn't exist in table
case 1072:
printf("Connect failed: %s'n", mysqli_connect_error());
exit();
break;
// and so on...
}
}