PHP MYSQL两次运行查询

时间:2018-11-23 09:25:27

标签: php mysql if-statement pdo

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

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。我想确保查询已成功执行。

3 个答案:

答案 0 :(得分:1)

这是因为它两次调用$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";
}

答案 1 :(得分:1)

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

因此,在您的情况下,您两次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";
}

答案 2 :(得分:1)

您执行两次$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";
}