PHP Procedure coding with mysqli


PHP Procedure coding with mysqli

我对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"),我想停止处理。

感谢所有的帮助...

  1. 您需要检查 mysqli_query返回值,以了解查询是成功还是失败。
  2. 您可以使用mysqli_errno获取确切的错误代码。
  3. 您正在使用的_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... 
    }
}