基本上我要做的是在用户提交表单时通过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());
}
此处查询正在执行,服务器不会抛出任何错误,但最后没有行添加到数据库中。 我缺少什么?
如果有人建议采用更好的方法,我会很高兴。
答案 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 ) ;
}