2014-11-22 54 views
2

我創建了一個for循環,循環通過一個數組或從一個字符串爆炸的單詞。 for循環的工作原理已經通過echo語句進行了測試。運行此代碼時,它只將1條記錄插入到數據庫中,而不是數組中的字符串數量。MySQL裏面for循環。插入只在第一個循環運行

$item=explode(" ", $items); 
for ($i = 0; $i < count($item); ++$i) { 
    // Create connection 
$conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname); 
// Check connection 
if (!$conn) { 
    die("Connection failed: " . mysqli_connect_error()); 
} 

$sql = "INSERT INTO invlog (itemid, qty) 
VALUES ('".$item[$i]."', '-1')"; 

if (mysqli_query($conn, $sql)) { 
    echo "New record created successfully"; 
} else { 
    echo "Error: " . $sql . "<br>" . mysqli_error($conn); 
} 

mysqli_close($conn);  
    } 
+3

旁註:爲什麼不拿出環路之前連接之外。無需連接/關閉每一次迭代 – Ghost 2014-11-22 02:11:00

+0

您是否收到錯誤消息,或者它看起來沒有安靜地失敗? – paxdiablo 2014-11-22 02:11:04

+1

像這樣連接和關閉每次迭代都是荒謬的。 – 2014-11-22 02:16:08

回答

2

爲了提高效率並避免多個數據庫調用,您應該只執行一次statemnt。

因此循環,創建查詢,然後執行它。

像這樣..

$item=explode(" ", $items); 
$query=""; 
for ($i = 0; $i < count($item); ++$i) { 
    // Build Query 
    $query.="(".$item[$i].",-1),"; 
} 
$query = rtrim($query); // Remove last trailing comma from the right hand side of query string 

//Connect to database, and do DB stuff outside of loop in one call 
$conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname); 
// Check connection 
if (!$conn) { 
    die("Connection failed: " . mysqli_connect_error()); 
} 
$sql = "INSERT INTO invlog (itemid, qty) 
VALUES ".$query; 

    if (mysqli_query($conn, $sql)) { 
    echo "New records created successfully"; 
    } else { 
    echo "Error: " . $sql . "<br>" . mysqli_error($conn); 
    } 

    mysqli_close($conn);  
+0

您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,在'4321 9876 6543,-1'附近使用正確的語法),' – 2014-11-22 02:37:33

+0

試用逗號仍然存在 – 2014-11-22 02:37:49

+0

@chuckbeyor如果你看一下,它並沒有真正爆炸。 ''4321 9876 6543,-1),''這些數字仍然以空格連接。你應該在你的問題中加入'var_dump($ item)'。並使用'rtrim($ query,',')' – Ghost 2014-11-22 02:41:30

0
$replacer = array("\r\n", "\n", "\r", "\t", " "); 
$items = str_replace($replacer, " ", $items); 
$item=explode(" ", $items); 
// Create connection 
$conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname); 
// Check connection 
if (!$conn) { 
    die("Connection failed: " . mysqli_connect_error()); 
} 


for ($i = 0; $i < count($item); ++$i) { 

$sql = "INSERT INTO invlog (itemid, qty) 
VALUES ('".$item[$i]."', '-1')"; 

if (mysqli_query($conn, $sql)) { 
    echo "New record created successfully"; 
} else { 
    echo "Error: " . $sql . "<br>" . mysqli_error($conn); 
} 


    } 
    mysqli_close($conn);