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

标签 php mysql sql pdo

我有一个 HTML 文本区域,每行有 100-1000 个用户:密码对,我想现在使用 PDO 将它们插入到我的数据库中。由于我对 PDO 非常陌生,因此我需要您的帮助,也许您知道一些可以实现更快插入或更简单代码的优化。

这可能是我的文本区域的内容:

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 插入不起作用。我应该如何解决这个问题?对于(速度/代码)优化有什么建议吗?

最佳答案

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

如果您为绑定(bind)占位符提供值,例如:

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

这将被解释为单个值,不会被“视为”SQL 文本,而只是一个字符串,即要分配给单个列的值。

<小时/>

您需要一个如下所示的 SQL 语句:

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

您需要为每个绑定(bind)占位符提供一个值。

关于单个查询中的 PHP 多值字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25214724/

相关文章:

php - 一个 SQL 语句来处理相同值的 NULL 和 STRING 可能性

java - 与 Yii 等 php 框架相比,使用 GWT 有何优势

php - 使用 symfony 2.8 框架创建项目时出现 GuzzleHttp\Exception\RequestException

php - MySQL 查询优化 - 分组值

mysql - 水线 - 字段总和的位置

C# LINQ 查询 (MYSQL EF) - 不同的最新记录

c# - 无法在 C# 中执行多个 Oracle 查询

php - 自动 <p> 正则表达式 - 需要修复

mysql - 寻求一种快速更新包含重复值的记录的方法

mysql - 如何写一个SQL查询来解决8皇后的问题?