单个查询中的PHP多值字符串

时间:2014-08-09 02:35:07

标签: php mysql sql pdo

我有一个HTML Textarea,每行有100-1000个User:Password对,我想现在使用PDO将它们插入到我的数据库中。由于我是PDO的新手,我需要你的帮助,也许你知道一些更快的插入或更简单的代码的优化。

这可能是我的textarea的内容:

User1:Pass1
User2:Pass2
User3:Pass3

这就是我尝试过的:

$query = "INSERT INTO Refs (username,password,targetLevel,idOrder) VALUES :accounts";
$ps_insert = $db->prepare($query);

//this iy my textarea from the form
$accounts = $_POST['accounts']; 

// Convert Accountaray to user:password tuples
// Write the SQL Statement of the VALUE pairs into
// an string array in this style '(user,password)'  
$msg = explode("\n", $accounts);
for($i = 0; $i < sizeof($msg); $i++) 
{ 
        list($user, $pass) = explode(":", $msg[$i]);
        if(!empty($user)){
            $insert_parts[$i]="('" . $user . "','" . $pass . "',10,0)";
        }
}

// Content of this string is: (user1,pass1,10,0), (user2,pass2,10,0), (user3,pass3,10,0)
$accountInserts = implode(',', $insert_parts);
$ps_insert->bindParam(':accounts', $insert_parts);
$ps_insert->execute();

早些时候我使用了“众所周知的”MySQL查询,但我想使用PDO,因为我会将其用于其他事情以及常见的预处理语句。谢谢你的帮助!

问题:MySQL插入不起作用。我该怎么解决这个问题? (速度/代码)优化的任何建议?

1 个答案:

答案 0 :(得分:0)

bind参数指定单个标量值。在INSERT语句中,绑定占位符:account表示分配给一列的值。您只能通过绑定变量提供数据值,您不能将parens和逗号包括为SQL文本。

如果为绑定占位符提供值,例如:

"('foo','bar',7,1)"

这将被解释为单个值,不会被&#34;看到&#34;作为SQL文本,但只是一个字符串,要分配给单个列的值。


您需要一个看起来像这样的SQL语句:

INSERT INTO Refs (username,password,targetLevel,idOrder) VALUES (:v1, :v2, :v3, :v4)

并且您需要为每个绑定占位符提供值。