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个问号?我不想这样做的唯一原因是因为问号的数量是可变的,所以我将不得不手动构建查询字符串。
您可以使用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)
您可以将参数绑定成一个循环。