我在PHP中有以下数组:3D, 瑪丹娜, 電影, 情報, 大獨裁
我的SQL查询如下:
$query = "SELECT * FROM news
WHERE tagkey IN (3D, 瑪丹娜, 電影, 情報, 大獨裁)";
但是此查询会出错:Query failed
。
我需要添加撇号,但如何更改
`3D, 瑪丹娜, 電影, 情報, 大獨裁`
到
`'3D', '瑪丹娜', '電影', '情報', '大獨裁'`
所以查询就像:
$query = "select * FROM news WHERE tagkey IN ('3D','瑪丹娜','電影','情報','大獨裁') ";
我目前的PHP代码:
$tag_array = array($line["tagkey"]);
$tag_str = implode(" ", array($line["tagkey"]));
echo $tag_str;
$query = "select * FROM news WHERE tagkey IN ($tag_str)";
更新2012/06/15 抱歉:现在我改变了我的Vhost。这个脚本错误..
此: 警告:array_map()[function.array-map]:第一个参数,即'apply_quotes',应为NULL或
中的有效回调$list = explode(',', $line["tagkey"]);
$list = array_map('apply_quotes', $list);
警告:join()[function.join]:错误的参数。在
$query = "select * FROM news
WHERE tagkey IN (" . join(',', $list) . ") ";
答案 0 :(得分:3)
array_map()
允许您对数组的每个元素调用函数。
$tag_array = array_map ( function($var) {
return "'" . mysql_real_escape_string($var) . "'";
}, $tag_array );
答案 1 :(得分:2)
<强>更新强>
误解了之前的问题。
在查询中使用它之前,必须先转义数组中的每个项:
function apply_quotes($item)
{
return "'" . mysql_real_escape_string($item) . "'";
}
$list = array('3D', '瑪丹娜','電影','情報','大獨裁');
$list = array_map('apply_quotes', $list);
然后,构建查询:
$query = "select * FROM news WHERE upordown = 1 AND tagkey IN (" .
join(',', $list) .
") AND id <> $id ORDER BY udate DESC";
如果你的所有物品都在一个字符串而不是一个数组中,你必须先将它变成一个数组:
$list = explode(',', '3D,瑪丹娜,電影,情報,大獨裁');
我假设您正在使用mysql_
个函数;如果没有,请告诉我:)。
答案 2 :(得分:0)
您的问题不明确,但请尝试这样做;
$tag_array = array($line["tagkey"]);
$tag_str = implode(" ", array($line["tagkey"]));
echo $tag_str;
$query = "select * FROM news WHERE upordown = 1 AND tagkey IN ('".$tag_str."') AND id <> '".$id."' ORDER BY udate DESC ";