0

我有一个 id 数组$friends = array(0001, 0002, 0003, 0004)和一个数据库,其中table_name = friends, column_header = fid. fidinfriends可能包含也可能不包含其中一个朋友 ID。我想输入$friends查询,并返回$friendsfid.

我确定这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();
4

1 回答 1

1

您将需要使用 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 注入。

于 2012-04-09T21:38:13.770 回答