PHP MYSQL运行查询两次



当我运行以下脚本时。该行被插入两次(查询运行两次(。

require_once $_SERVER['DOCUMENT_ROOT'].'/functions/sanitize.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/main/config.php';
$response    =   textsanitize($_POST['r']);
$ticket      =   idssanitize($_POST['t']);
$stmt = $condb->prepare("INSERT INTO ticket_reponses (ticket_id,user_id,time,response) VALUES (:ticket_id,:user_id,:time,:response)");
$stmt->execute(
array(
"ticket_id" => $ticket,
"user_id" => $_SESSION['user_id'],
"time" => time(),
"response" => $response
)
);
if($stmt->execute()){
echo "SUCCESS";
}

当我移除if($stmt->execute()){echo "SUCCESSS";}。它以正确的方式运行。插入一次的行。

为什么if($stmt->execute())再次执行查询?我以为if($stmt->execute())只返回TRUE || FALSE。我希望确保查询成功执行。

在任何语言中准备好的语句的一个好用途是,您可以准备一次,然后根据需要执行多次。

因此,在您的情况下,您execute()语句两次,但也有可能在循环中插入一整组具有相同准备语句的数据。每次调用execute()时,只需传递一组新的值即可运行准备好的语句。在您的情况下,它是一个INSERT,因此它会运行两次。

在你的情况下,你可能只需要。。。

$stmt = $condb->prepare("INSERT INTO ticket_reponses (ticket_id,user_id,time,response) VALUES (:ticket_id,:user_id,:time,:response)");
if($stmt->execute(array(
"ticket_id" => $ticket,
"user_id" => $_SESSION['user_id'],
"time" => time(),
"response" => $response)))    {
echo "SUCCESS";
}

这是因为它调用了$stmt->execute()函数两次。在if语句之前一次,在if语句中作为条件一次。所以,你需要删除它的一个实例。

我认为您需要检查语句是否正确执行(因此需要if(。所以,代码可以像。。。

require_once $_SERVER['DOCUMENT_ROOT'].'/functions/sanitize.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/main/config.php';
$response    =   textsanitize($_POST['r']);
$ticket      =   idssanitize($_POST['t']);
$stmt = $condb->prepare("INSERT INTO ticket_reponses  (ticket_id,user_id,time,response) VALUES (:ticket_id,:user_id,:time,:response)");
$values = array(
"ticket_id" => $ticket,
"user_id" => $_SESSION['user_id'],
"time" => time(),
"response" => $response
);
if($stmt->execute($values)){
echo "SUCCESS";
}

您要执行两次$stmt->execute(),所以它只是插入两行。这里没有火箭科学。

如果您想检查查询是否成功运行,请在第一条语句本身中进行检查。

require_once $_SERVER['DOCUMENT_ROOT'].'/functions/sanitize.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/main/config.php';
$response    =   textsanitize($_POST['r']);
$ticket      =   idssanitize($_POST['t']);
$stmt = $condb->prepare("INSERT INTO ticket_reponses (ticket_id,user_id,time,response) VALUES (:ticket_id,:user_id,:time,:response)");
$isSuccessful = $stmt->execute(
array(
"ticket_id" => $ticket,
"user_id" => $_SESSION['user_id'],
"time" => time(),
"response" => $response
)
);
if($isSuccessful){
echo "SUCCESS";
}

最新更新