2013-12-23 82 views
0

基本上我想要做的是當用戶提交表單時通過ajax註冊用戶。mysqli-> multi_query INSERT INTO no result

我想我的數據存儲在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()); 
    } 

這裏查詢被執行的代碼,也沒有由服務器拋出錯誤,但是沒有排在末尾添加到數據庫中。 我錯過了什麼?

如果有人提出更好的方法,我會很高興。

+0

刪除BEGIN和COMMIT,我懷疑它把它作爲一個單一query.OR放在雙引號每個查詢,請用逗號分隔。 – Mihai

+0

Echo'$ sql_insert'然後嘗試直接對數據庫運行查詢;這會告訴你,如果查詢是有效的或不... –

+0

@TiesonT。是的,它在phpMyAdmin成功運行,但不在這裏 – Anuj

回答

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) ; 
    }