我试图插入数据,并且还更新了2个不同表中的数据。所以我尝试了这段代码
$query = "INSERT INTO mitra (id_user, puas_1, puas_2)
values (?,?,?);
UPDATE user
SET fill = 1
WHERE id = '".$id_session."';";
$stmt = $connection->prepare($query);
$stmt->bind_param("idd", $id_session, $puas1, $puas2);
$stmt->execute();
if ($stmt->affected_rows) {
echo "Uploaded " . $stmt->affected_rows . " rows";
// header("Location: umum.php");
} else {
echo "No rows matched the criteria.";
}
$stmt->close();
但是它说Uncaught mysqli_sql_exception: You have an error in your SQL syntax;
即将更新等,请问有什么可以使它工作的吗?
答案 0 :(得分:1)
您是否打算使用mysqli_multi_query
?这确实允许使用分号来分隔多个查询..但不能与准备好的语句一起使用,并且可能会打开代码以进行sql注入。
要使用两个准备好的语句,您可以这样:
$rows = false;
$sql='insert into `mitra` (`id_user`, `puas_1`, `puas_2`) values ( ?, ?, ? )';
$stmt=$connection->prepare( $sql );
if( $stmt ){
$stmt->bind_param('idd', $id_session, $puas1, $puas2 );
$res=$stmt->execute();
$stmt->close();
if( $res ){
$sql='update `users` set `fill`=1 where `id`=?';
$stmt=$connection->prepare( $sql );
if( $stmt ){
$stmt->bind_param('i',$id_session );
$res=$stmt->execute();
$rows = $stmt->affected_rows;
$stmt->close();
}
}
if( $res && $rows )exit( header('Location: umum.php') );
}
答案 1 :(得分:0)
您可以创建一个过程并在php中调用它。
过程
DELIMITER $$
DROP PROCEDURE IF EXISTS `proc_insert_and_update` $$
CREATE PROCEDURE `proc_insert_and_update`(
IN x_user_id int(11),
IN x_puas_1 VARCHAR(20),
IN x_puas_2 varchar(20)
)
BEGIN
#inserting data
insert into mitra (id_user, puas_1, puas_2)
values ( x_user_id, x_puas_1, x_puas_2 );
#update data
update users set fill=1 where id=x_user_id;
END$$
DELIMITER ;
PHP
$stmt = $connection->prepare('CALL proc_insert_and_update(?, ?, ?)');
$stmt->bind_param('iss', $id_session, $puas1, $puas2);
阐明参数类型(i->整数,s-> varchar)。