繁体   English   中英

如何在MySQL IN语句中的内爆数组中的字符串周围添加撇号?

[英]How to add apostrophes around strings from an imploded array in a MySQL IN statement?

我在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) . ") ";

array_map()使您可以在数组的每个元素上调用函数。

$tag_array = array_map ( function($var) {
  return "'" . mysql_real_escape_string($var) . "'";
}, $tag_array );

但是我建议您使用准备好的语句( PDOmysqli而不是即将弃用的mysql_函数)。

更新

误解了前面的问题。

您必须先对数组中的每个项目进行转义,然后才能在查询中使用它:

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_函数; 如果没有,让我知道:)

您的问题尚不清楚,但是请尝试这样;

$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 ";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM