我试图建立使用PHP和MySQL查询内容的SQL查询,介绍如何使用的变量
$query = "select * from products where product_name = '$item_name'";
这个工程时$ ITEM_NAME认为只有一个名字,而是$ ITEM_NAME是数组和基于用户的交互可以包含多个名称,我怎样才能使查询运行多个名称并获取结果行。
在此先感谢
我试图建立使用PHP和MySQL查询内容的SQL查询,介绍如何使用的变量
$query = "select * from products where product_name = '$item_name'";
这个工程时$ ITEM_NAME认为只有一个名字,而是$ ITEM_NAME是数组和基于用户的交互可以包含多个名称,我怎样才能使查询运行多个名称并获取结果行。
在此先感谢
这里是你如何可以建立名称的安全列表插入IN子句...
if (is_array($names) && count($names))
{
$filter="('".implode("','" array_map('mysql_real_escape_string', $names))."')";
$sql="select * from products where product_name in $filter";
//go fetch the results
}
else
{
//input was empty or not an array - you might want to throw an
//an error, or show 'no results'
}
array_map在通过mysql_real_escape_string运行每个名称以清理它之后返回名称的输入数组。我们使用这个数组来创建一个好的列表来使用IN子句。
您应该始终确保任何数据(特别是直接来自客户端的数据)在查询中正确转义以防止SQL injection攻击。
$vals = implode(',',$item_name);
$query = "select * from products where product_name in (".$vals.");";
给一个尝试。
应该是$瓦尔斯= ' “' .implode( ' ”“',$ ITEM_NAME)。”';为了有引用值 – Eineki 2009-09-29 13:31:31
+1,但是,鸽子,是正确的消毒数据将是非常有益的。 – 2009-09-29 13:31:41
这不是一个如何构建查询的好例子 - 对数据进行santizing应该永远不会被事后考虑,甚至从有启发性的例子中删除,以使它们更清晰。 – 2009-09-29 13:42:07
$query = "select * from products where product_name in(";
foreach($item_name as $name)
{
$query .= "'" . $item_name . "', ";
}
$query = substr($query, 0, strlen$query) - 2);
$query .= ");";
第一个答案(由inkedmn)真的是最好的一个,虽然
你有一个很好的机会逃离这里的字符串;-)然后关闭')'。 – 2009-09-29 13:32:38
是的,不是列表中的最佳答案。 – Natrium 2009-09-29 13:34:44
基于inkedmn的回应(这并没有引述的项目名称):
$query = 'select * from products where product_name in ("' . implode('", "', $item_name) . '")';
尽管你可以使用一个全文搜索更好。
+1,最后一个完整的解决方案。 ;-) – 2009-09-29 13:34:07
为了让它更具启发性,我建议使用'else'从而避免意外;-) – 2009-09-29 13:47:24
好点,完成! – 2009-09-29 14:11:05