mysqli-> multi_query INSERT INTO没有结果

时间:2013-12-23 09:45:04

标签: php mysql mysqli

基本上我要做的是在用户提交表单时通过ajax注册用户。

我希望我的数据存储在3个不同的表中。所以这是我正在运行的代码

    $sql_insert = "BEGIN;
                        INSERT INTO $table_name_primary (role, email, verified)
                            VALUES(1, '$email', 0);
                        INSERT INTO $table_name_details (user_id, first_name)
                            VALUES(LAST_INSERT_ID(),'$name');
                        INSERT INTO $table_name_log_in (user_id, hash_algo, iteration, pass_salt, pass_hash)
                            VALUES(LAST_INSERT_ID(), '$algo', $ite, '$salt', '$hash');
                       COMMIT;";

    $mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

    if ($mysqli->multi_query($sql_insert)) {
        do {
            /* store first result set */
            if ($result = $mysqli->store_result()) {
                while ($row = $result->fetch_row()) {
                    printf("%s\n", $row[0]);
                }
                $result->free();
            }
            /* print divider */
            if ($mysqli->more_results()) {
                printf("-----------------\n");
            }
        } while ($mysqli->next_result());
    }

此处查询正在执行,服务器不会抛出任何错误,但最后没有行添加到数据库中。 我缺少什么?

如果有人建议采用更好的方法,我会很高兴。

1 个答案:

答案 0 :(得分:0)

您应该使用set_error_handler()来检查SQL调用的错误返回。例如:

set_error_handler( "NormalErrorHandler" ) ;

function NormalErrorHandler( $errno, $errstr, $errfile, $errline )
    {
    $ErrType = DecodeErrno( $errno ) ;
    $Backtrace = debug_backtrace() ;
    // The first item in debug_backtrace() is this function, so no use printing it
    unset( $Backtrace[ 0 ] ) ;
    $FullError = "Server: {$_SERVER['SERVER_NAME']}\nIP: {$_SERVER['REMOTE_ADDR']}\n"
        . "$ErrType: $errstr\nLine: $errline\nFile: $errfile\n"
        . "debug_backtrace():\n" . print_r( $Backtrace, TRUE )
        . "GLOBALS:\n" . print_r( $GLOBALS, TRUE )
        ;
    die( $FullError ) ;
    }