从具有 PDO (PHP) 的 SQL 数据库中拉取数组值匹配


Pull Array Value matches from a SQL Database with PDO (PHP)

我有一个 id 数组$friends = array(0001, 0002, 0003, 0004)和一个数据库,其中 table_name = friendscolumn_header = fid . friends中的fid可能包含也可能不包含其中一个好友 ID。 我想在查询中输入$friends,并返回$friends和一行fid中的所有当前值。

我确定fid={array_values($friends)}是错误的,但我不知道如何向 WHERE 部分传递一个值数组......

//All DB_X's are defined in another file that is included in this actual file
$db = new PDO("mysql:host=".DB_SERVER.";dbname=".DB_NAME, DB_USER, DB_PASS);
$stmt = $db->prepare("SELECT fid FROM friends WHERE fid={array_values($friends)} ORDER BY fid ASC");
$stmt->execute();
$friendResults = $stmt->fetchAll();
您需要

使用 SQL 的 IN 运算符:

SELECT ... FROM ... WHERE foo IN (val1, val2, ...)

您可以使用 PHP 的 implode() 函数来获取所需的 SQL 位:

$values = implode(', ', array_values($friends));
$query = "SELECT ... FROM ... WHERE fid IN ({$values})";

如果您的值是数字,则上述方法将起作用。 如果它们是字符串,则必须在implode() ing 之前修改值:

$values = array_map(array_values($friends), function($value) {
    return "'{$value}'"; // Here is where you could do sanitization
});
$values = implode(', ', $values);

请注意:您必须正确清理$friends中的数据以防止SQL注入。