我可以使用MYSQLI和PHP将多个值绑定为单个参数吗?

Ed *_*rty 3 php mysql sql mysqli

假设我有以下SQL查询:

SELECT id,name FROM user WHERE id IN ('id1','id2','id3')
Run Code Online (Sandbox Code Playgroud)

现在想象一下,我需要由PHP提供的ID数组。所以我有这样的事情:

$idList = array('id1','id2','id3');
$query = "SELECT id,name FROM user WHERE id IN (?)";
$stmt = $db->prepare($query);
$stmt->bind_param(/*Something*/);
Run Code Online (Sandbox Code Playgroud)

我可以替换为什么/*Something*/以获得与原始查询相同的结果?还是我需要在查询格式中放入3个问号?我不想这样做的唯一原因是因为问号的数量是可变的,所以我将不得不手动构建查询字符串。

Fan*_*nis 5

您可以使用PHP使用编写占位符,然后循环?使用所有参数。str_repeat()bind_param

请注意str_repeat将返回的结尾逗号。要么使用rtrim()它要么array_fill()创建一个重复的占位符数组,然后使用join()它们创建您的占位符字符串。

$arrPlaceholders = array_fill(0, count($idList), '?') ;
$strPlaceholders = join(', ', $arrPlaceholders) ;
Run Code Online (Sandbox Code Playgroud)

然后您的查询可以是:

$query = "SELECT id,name FROM user WHERE id IN ($strPlaceholders)";
Run Code Online (Sandbox Code Playgroud)

您可以将参数绑定成一个循环。