我有一个 id 数组$friends = array(0001, 0002, 0003, 0004)
和一个数据库,其中 table_name = friends
, column_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注入。