我在数据库中有一个这样的数组:
Field : smt_id
Value in database : 261, 323
type : varchar(100)
smt_id is not fix字段。如果它更新为3个数组,它将像下面的例子:261,323,111和变量$mid将更改为261,323,111
现在我想使用这个变量做这样的SQL语句。
$mid = 261,323
$sql = "SELECT first_name FROM ".TABLE_PREFIX."members WHERE member_id ='$mid'";
$result = mysql_query($sql,$db);
当我打印SQL时,结果如下:
SELECT first_name FROM AT_members WHERE member_id ='261, 323'
我的问题是,我如何改变上面的sql,使它变成这样:
SELECT first_name FROM AT_members WHERE member_id IN ('261', '323')
以及我如何使每个结果都像这样中断:
John
Merry
$mid = explode(',', preg_replace('/'s+/', '', $mid));
$sql = 'SELECT first_name FROM '.TABLE_PREFIX.'members WHERE member_id IN ('.implode(',', $mid).')';
断言$mid
是一个数组:
'WHERE member_id IN ('.implode(',', $mid).')'
如果数组只有一个值,
提醒一下,这样的代码很容易受到SQL注入的攻击。
停止使用mysql扩展名
已弃用。使用mysqli或PDO代替(sql注入警报)。此外,不要将变量直接推入查询,而是使用准备好的语句。检查在这里。内爆在Double Gras的回答中得到了很好的解释。对于你的第二个问题,如果你希望每个结果都是一个一个的,你应该一个一个的去取。Fetch_assoc在这里是很好的mysqli扩展。
fetch_assoc的简单用法:if ($result = $mysqli->query($query)) {
/* fetch associative array */
while ($row = $result->fetch_assoc()) {
printf ("%s (%s)'n", $row["column1"], $row["column2"]);
}