使用WHERE子句将数组传递给查询

使用WHERE子句将数组传递给查询

给定一个ID数组$galleries = array(1,2,5)我希望有一个SQL查询,它在WHERE子句中使用数组的值,如下所示:

SELECT *FROM galleriesWHERE id = /* values of array $galleries... eg. (1 || 2 || 5) */

如何生成这个查询字符串以便与MySQL一起使用?


小唯快跑啊
浏览 886回答 4
4回答

LEATH

小心!这个答案包含了一个严厉的SQL注入脆弱性。不要使用这里提供的代码示例,除非确保任何外部输入都是经过消毒的。$ids = join("','",$galleries);   $sql = "SELECT * FROM galleries WHERE id IN ('$ids')";

跃然一笑

使用PDO:[1]$in&nbsp;=&nbsp;join(',',&nbsp;array_fill(0,&nbsp;count($ids),&nbsp;'?'));$select&nbsp;=&nbsp;<<<SQL &nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;* &nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;galleries &nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;id&nbsp;IN&nbsp;($in);SQL;$statement&nbsp;=&nbsp;$pdo->prepare($select);$statement->execute($ids);使用MySQLi&nbsp;[2]$in&nbsp;=&nbsp;join(',',&nbsp;array_fill(0,&nbsp;count($ids),&nbsp;'?'));$select&nbsp;=&nbsp;<<<SQL &nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;* &nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;galleries &nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;id&nbsp;IN&nbsp;($in);SQL;$statement&nbsp;=&nbsp;$mysqli->prepare($select);$statement->bind_param(str_repeat('i',&nbsp;count($ids)),&nbsp;...$ids); &nbsp;&nbsp;&nbsp;&nbsp;$statement->execute();$result&nbsp;=&nbsp;$statement->get_result();说明:使用SQLIN()运算符检查给定列表中是否存在值。一般来说,它看起来是这样的:expr&nbsp;IN&nbsp;(value,...)我们可以构建一个表达式来放置在()从我们的阵列。请注意,括号内必须至少有一个值,否则MySQL将返回一个错误;这等于确保输入数组至少有一个值。若要帮助防止SQL注入攻击,请首先生成?为每个输入项创建参数化查询。在这里,我假设包含您的ID的数组被调用$ids:$in&nbsp;=&nbsp;join(',',&nbsp;array_fill(0,&nbsp;count($ids),&nbsp;'?'));$select&nbsp;=&nbsp;<<<SQL &nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;* &nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;galleries &nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;id&nbsp;IN&nbsp;($in);SQL;给定由三个项组成的输入数组$select看起来像:SELECT&nbsp;*FROM&nbsp;galleries WHERE&nbsp;id&nbsp;IN&nbsp;(?,&nbsp;?,&nbsp;?)再次注意,有一个?对于输入数组中的每个项。然后,我们将使用PDO或MySQLi来准备和执行上述查询。使用IN()带字符串的运算符由于绑定参数的存在,很容易在字符串和整数之间进行更改。对于PDO,不需要更改;对于MySQLi更改str_repeat('i',到str_repeat('s',如果你需要检查字符串。[1]:为了简洁起见,我省略了一些错误检查。您需要检查每个数据库方法的常见错误(或者将DB驱动程序设置为抛出异常)。[2]:需要PHP 5.6或更高版本。同样,我省略了一些错误检查,以保证简洁性。

MMMHUHU

假设你事先正确消毒了你的输入.。$matches&nbsp;=&nbsp;implode(',',&nbsp;$galleries);然后调整查询:SELECT&nbsp;*FROM&nbsp;galleries WHERE&nbsp;id&nbsp;IN&nbsp;(&nbsp;$matches&nbsp;)根据数据集适当地引用值。
打开App,查看更多内容
随时随地看视频慕课网APP