2014-11-22 57 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);