如何在同一个按钮调用中在不同表中插入和更新sql数据库

时间:2019-07-10 07:58:39

标签: php mysql

我试图插入数据,并且还更新了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;即将更新等,请问有什么可以使它工作的吗?

2 个答案:

答案 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)。