【问题标题】:multi_query() has an errormulti_query() 有错误
【发布时间】:2015-11-22 02:56:46
【问题描述】:

我需要一些帮助来查找随附代码中的错误。当我使用 if ($conn->query($sql) === TRUE) { 方法运行两个查询中的任何一个时,每个查询都可以正常工作。但是当我尝试将它们与if ($conn->multi_query($sql) === TRUE) { 方法结合使用时。没有上传记录。我在这里做错了什么。

    <?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "practice";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
echo "Connection made...";

$payload_dump = $_POST['payload'];
echo $payload_dump;

$payload_array = json_decode($payload_dump,true);

if(is_array($payload_array)){
foreach($payload_array as $row){

//get the data_payload details

$device = $row['device'];
$type = $row['data_type'];
$zone = $row['zone'];
$sample = $row['sample'];
$count = $row['count'];
$time = $row['date_time'];
$epoch = $row['epoch_stamp'];

$sql = "INSERT INTO data(device, type, zone, sample, count, date_time, epoch_stamp) VALUES('$device', '$type', '$zone', '$sample', '$count', '$time', '$epoch');";
$sql . = "UPDATE data SET date_time = FROM_UNIXTIME(epoch_stamp);";
if ($conn->multi_query($sql) === TRUE) {
//if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}
}
}
$conn->close();
?>

...是的,我意识到这段代码不安全,但它可以用于我的测试目的。

【问题讨论】:

  • $conn-&gt;error; 有什么要说的?
  • 另外,您的更新将尝试更新您的整个表格。使用where 子句。
  • 它是从 Arduino 调用的,我不知道如何将错误消息显示回 shell。我的编码技能很基础。
  • echo "Error: " . $sql . "&lt;br&gt;" . $conn-&gt;error; 应该是在呼应什么。
  • 好的,我想我知道问题出在哪里$sql . = "UPDATE 点和等号之间有一个空格。将其更改为 $sql .= "UPDATE

标签: php mysql multi-query


【解决方案1】:

本质上,下面的代码是相同的,直到我们进入循环,在该循环中我们构建了一个要执行的查询数组,并在我们离开循环后在最后执行一次 multi_query()。为简洁起见,我删除了一些在开头呼应信息的 cmets 和语句。我希望这看起来不错并且有效....

<?php
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "practice";

    $conn = new mysqli($servername, $username, $password, $dbname);
    if( $conn->connect_error ) die("Connection failed: " . $conn->connect_error);
    $payload_dump = $_POST['payload'];

    $payload_array = json_decode($payload_dump,true);

    if( is_array( $payload_array ) ){

        $queries=array();

        foreach( $payload_array as $row ){
            //get the data_payload details
            $device = $row['device'];
            $type = $row['data_type'];
            $zone = $row['zone'];
            $sample = $row['sample'];
            $count = $row['count'];
            $time = $row['date_time'];
            $epoch = $row['epoch_stamp'];

            /*note: we do not need to add the semi-colon here as it gets added later when we implode the array */
            $queries[]="INSERT INTO `data` ( `device`, `type`, `zone`, `sample`, `count`, `date_time`, `epoch_stamp` ) VALUES ('$device', '$type', '$zone', '$sample', '$count', '$time', '$epoch')";
        }
        /*
            Previously the below query was being execute on every iteration
            ~ because $epoch is now the last one encountered in the array, 
            the value that is updated in ALL records is as it would have been
            previously.
        */
        $queries[]="UPDATE `data` SET `date_time` = from_unixtime( $epoch );";

        $sql=implode( ';', $queries );
        if ( $conn->multi_query( $sql ) === TRUE ) {
            echo "New records created and updated successfully";
        } else {
            echo "Error: " . $sql . "<br>" . $conn->error;
        }
    }
    $conn->close();

?>

【讨论】:

  • 大约 10 分钟给 OP 一个最后的努力评论。以前...还没有任何消息。
  • 必须。它现在刚刚结束,哈哈,我还没有吃点东西。难怪我的肚子对我咆哮。
  • 哇哇哇!就像一个魅力......对不起,伙计们。一天的工作叫。感谢您的帮助...非常感谢。
  • aaahhh 是的,另一个幸福的结局。干得好@RamRaider ;-)
  • 很高兴听到它@ghowe 所以,我认为my comment here... 那时没有用(?)
猜你喜欢
  • 2011-11-15
  • 1970-01-01
  • 1970-01-01
  • 2014-05-11
  • 2018-09-22
  • 2011-04-01
  • 1970-01-01
  • 2015-04-08
相关资源
最近更新 更多