php - PHP、Python 中的 Mysql IN 子句参数化

标签 php python mysql

我习惯于为我的查询做类似下面的事情:

$array = array(123,456,10,57,1024,768); //random data
$sql = "select * from table where field in(".implode(',',$array).")";
mysql_query($sql);

这工作得很好,而且速度很快,即使数组可能有 1,000 个或更多项要搜索(实际上是对不存在的表的连接)。 对我来说,这非常有用,因为我将来自多个来源的数据连接在一起。

但是,我知道它有点不安全——如果我没有正确转义传入数据,则可能会发生 SQL 注入(inject)。

我想试着找出一个参数化的等价物;使用更多“强化”代码的某种方式来执行这种“数组 IN”。

可能无法直接执行此操作,它可能需要一个辅助函数来进行替换。如果是这样,我正在寻找一个可以放入我的代码中的好东西,希望它能让我将数组作为参数传递。

虽然我的示例是针对 PHP 的,但我也需要针对 Python 解决这个问题,因为我正在那里做同样的事情。

我在这里读过一些类似的问题,但没有看到任何(好的)答案。

最佳答案

使用 PDO 准备语句:

$placeholders = str_repeat('?, ', count($array)-1) . '?';
$stmt = $pdo->prepare("SELECT * FROM table WHERE field IN ($placeholders)");
$stmt->execute($array);

$placeholders 将包含一系列 ?, ?, ? 占位符,? 的数量与数组的大小相同.然后,当您执行该语句时,数组值将绑定(bind)到占位符。

关于php - PHP、Python 中的 Mysql IN 子句参数化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35783363/

相关文章:

python - Matplotlib 崩溃 tkinter 应用程序

php - 准备语句 PHP 中的多个变量

MySQL 通过多个 COALESCE(CAST

php - PHP邮件功能无法完成电子邮件的发送

php - 使用 php 从 mp3 转换为 ogg

python - 带有 CheckDelegate 项目的 ListView 在滚动时不保留选中的复选框

php - 用户名和电子邮件一起登录 laravel 5.3

php - 我需要用不同的值更新多行数据。我可以使用哪个 php 循环或代码来实现相同的功能?

php - 多个查询返回错误为什么?

python - 如何将成员子集添加到 Python 枚举?