簡體   English   中英

為什么此MySQL INSERT INTO運行兩次?

[英]Why is this MySQL INSERT INTO running twice?

我正在嘗試使用下面的mysql insert語句將信息添加到數據庫表中。 但是,當我執行腳本時,insert語句將運行兩次。

這是網址mysite.com/save.php?Body=p220,c180

提前致謝。

<?php
//tipping fees application
require('base.inc.php');
require('functions.inc.php');

// connect to the database & save this message there

try {
    $dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);


//$number = formatPhone($_REQUEST['From']);
//if($number != 'xxx-xxx-xxxx'){die('SMS from unknown number');} // kill this if from anyone but mike

$message = $_REQUEST['Body'];
//$Sid = $_REQUEST['SmsSid'];
$now = time();
echo $message;

$message = explode(",",$message);
echo '<pre>';
print_r($message);
echo 'message count = '.count($message);
echo '</pre>';

$i = 0;
$j = count($message);

while($i<$j){
    $quantity =$message[$i];
    $material = substr($quantity, 0, 1);
    $amount = substr($quantity, 1);

    switch ($material) {
        case 'p':
            $m = "paper";
            break;
        case 'c':
            $m = "containers";
            break;
        default:
            $m = "other";
        }

        $count = $dbh->exec("INSERT INTO tippingtotals(sid,time,material,weight) VALUES('$i+$j','$now','$m','$amount')");
        echo $count;
        echo '<br />';

    $i++;
    }



//close the database connection 
    $dbh = null;
    }
catch(PDOException $e)
    {
    echo $e->getMessage();
    }
?>

像大多數人一樣,我認為這是因為我開始$ i = 0,所以我在insert語句中添加了$ i + $ j,這樣我就可以看到項目是如何插入表中的。 這是運行腳本返回的內容:

腳本輸出

我敢肯定我的邏輯有誤。 我只是無法弄清楚它是什么。

我按照下面的建議運行LiveHTTPHeaders,這就是結果...

http://localhost/mysite/save.php?Body=p180,c220

GET /mysite/save.php?Body=p180,c220 HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive

HTTP/1.1 200 OK
Date: Mon, 19 Apr 2010 22:17:31 GMT
Server: Apache/2.0.63 (Unix) PHP/5.2.11 DAV/2
X-Powered-By: PHP/5.2.11
Content-Length: 93
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html
----------------------------------------------------------

原來只有在Chrome中加載save.php時才會發生該錯誤。

毫無疑問,你的情況

while($i<$j){

正在評估,使其執行兩次。

也就是說-它被評估為

 while(0<2)

是不是

您的$j變量, count($message)的結果將為2,因為explode(',',"p220,c180")將為您提供兩個元素的數組。

由於您從$i = 0 ,並且在每個循環上將其遞增1,因此在$i < $j不再是真實的語句之前,循環將執行兩次。

這里是:

$i0並且$j用數組$message的元素數量初始化。 通過在字符串上使用explode(',', $var)創建此數組。 $_GET['Body']包含的字符串為p220,c180 因此該數組具有兩個元素,因此$j = 2

while循環將在$i >= $j$i >= 2 )之前執行兩次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM