当前位置: 首页 > 面试题库 >

如何将数组插入带有PHP和PDO的单个MySQL Prepared语句中

姚烨
2023-03-14
问题内容

在线注册期间,客户可以选择他们选择注册的许多程序。这些程序是三位数的整数,并存储在数组中。

例如:

我想注册Programid 155、165、175和185。

我的数组设置很简单:

$data = array();

$data[] = 155;

$data[] = 165;

$data[] = 175;

$data[] = 185;

当需要将此信息插入关联表时,我还包括注册另一部分的其他元素

例如,如果我正在执行一个SINGLE程序insert语句,它将看起来如下:

$stmt = $db->prepare("INSERT INTO table SET memberID=?, programID=?, date_added=NOW()");
$stmt->execute(array($memberid, 155));

我通常会为上面的数组创建一个简单的循环,该循环将调用sql语句的多个实例并执行,例如:

for($j = 0; $j < (count($data)-1); $j++) {
   $stmt = $db->prepare("INSERT INTO table SET memberID=?, programID=?, date_added=NOW()");
   $stmt->execute(array($memberid, $data[$j]));
}

我确实意识到上面的代码是无效的($ data [$ j]),但正在寻找正确的方法进行调用。

之前我还被告知,构建单个动态sql语句总体上比上面的多个调用更好。我的第一遍是这样的:

$sql = array(); 
foreach( $data as $row ) {
    $sql[] = '("'.$memberid.'", "'.$row[$j].'", NOW()")';
}
mysql_real_query('INSERT INTO table (memberid, programid) VALUES '.implode(',', $sql));

但是对于PDO,我不太确定这是如何工作的,尤其是对于占位符(?)。

有什么建议么?


问题答案:

您可以以编程方式构建查询…:

$sql = 'INSERT INTO table (memberID, programID) VALUES ';
$insertQuery = array();
$insertData = array();
foreach ($data as $row) {
    $insertQuery[] = '(?, ?)';
    $insertData[] = $memberid;
    $insertData[] = $row;
}

if (!empty($insertQuery)) {
    $sql .= implode(', ', $insertQuery);
    $stmt = $db->prepare($sql);
    $stmt->execute($insertData);
}


 类似资料:
  • 本文向大家介绍PHP PDO将数据插入表,包括了PHP PDO将数据插入表的使用技巧和注意事项,需要的朋友参考一下 插入数据非常简单,因为我们已经知道如何使用PDO与mysql(MariaDB)建立连接?我们可以使用与框架相同的代码,然后编辑$sql查询以插入数据而不是选择数据。 PHP代码使用PDO将数据插入表 输出结果 这样,我们可以使用PDO与MySQL进行交互,以轻松地向数据库表中添加新记

  • 问题内容: 这个问题已经在这里有了答案 : 使用PDO插入多行 (1个答案) 4年前关闭。 我有数据库表:和 当前,唯一要插入类别表的函数与此类似: 我有一种形式来输入标题和插入URL图像的可能性。 通过单击提交标题,我要转到类别表,到目前为止,图像应该转到表图像,每个图像都有一个ID,但内部连接到该类别的ID。 桌子: 我无法正确执行此操作 我想要的结果示例: html表格 提交后 表类别: 表

  • 问题内容: 这个问题已经在这里有了答案 : 如何防止PHP中进行SQL注入? (28个答案) 6年前关闭。 我只是在学习数据库,我希望能够存储用户输入。如何使用PHP获取表单数据并将其保存到数据库的基本示例是什么? 也使表单免受SQL攻击。 问题答案: 文件 sample.html 文件 sample.php 这是一个非常基本的例子。今天,许多PHP开发人员都在转向PDO。Mysqli并不是过时的

  • 问题内容: 我有这样的数组 当我做一个var-dump时我得到这个-> 现在,我尝试使用IN语句将此添加到数据库中- 我遇到的问题是内爆返回一个字符串。但是“ phone”列是数据库中的整数,并且数组也将其存储为整数。因此,由于我的最终查询如下所示,因此出现了SQL错误- 这是一个错误的查询。有没有解决的办法。 我的列名是动态的,基于用户要插入的内容。所以我不能使用诸如 :phone 和 :ima

  • 问题内容: 今天有人告诉我,我确实应该在应用程序中使用PDO和准备好的语句。在我了解好处的同时,我也在努力了解如何将其实现到我的工作流程中。除了它使代码更简洁外,我是否应该有一个特定的数据库类来容纳所有准备好的语句,还是应该在每次运行查询时都创建一个?我发现很难理解何时应使用标准PDO查询以及何时应使用准备好的语句。任何示例,技巧或教程链接将不胜感激。 问题答案: pdo :: prepare()

  • 我想知道是否可以使用一个准备好的语句插入多行。下面是我通常如何在DB中插入一行的示例: 我要插入的值将来自一个数组,例如:$values[0]['val1'];$values[0]["val2“];$values[0]['val3'];$values[1]['val1'];$values[2]['val2']; 等等。 这段代码可能需要一次插入几百行,我想过创建一个循环来创建数百个参数,然后为每一