如果我有以下数组$array[0] = array(
"1" => bar,
"2" => foo,
"3" => 13546
);
并且我内爆()它,返回的值将是:bar,foo,13546
,它不能在mysql查询中使用...我怎样才能放置单个引用那些是字符串的值......
我尝试了几种方法(比如foreach($array as $key=>$value)
检查is_numeric()$ value,检查没问题,但我不知道如何将值更改为'$ value'... )
对此有何不妥?
修改
我发现另一种方法可以帮助那些感兴趣的人:
$result[0] = array(
"1" => bar,
"2" => foo,
"3" => 1232.13
);
$copy_r = $result[0];
foreach($copy_r as $key=>$value)
{
if(!is_numeric($value))
{
$insert_array[] = "`$key` = '$value'";
}
else
{
$insert_array[] = "`$key` = $value";
}
}
$final_string = implode(',', $insert_array);
$insert_q = "INSERT INTO `table_name` SET $final_string
ON DUPLICATE KEY UPDATE ($final_string)";
答案 0 :(得分:6)
同意你应该查看准备好的陈述,但要回答你原来的问题,你可以这样做:
$array=array('a', 'b', 'c');
$string = "'" . implode("','", $array) . "'";
答案 1 :(得分:5)
更好地使用准备好的查询。但只是为了乐趣:
implode(',', array_map(function($value) {
if(!is_numeric($value)) {
return '"' . $value . '"';
//adds double quotes, but if you prefer single quotes, use:
//return "'" . $value . "'";
} else {
return $value;
}
}, $array[0]);
答案 2 :(得分:0)
foreach + isnumeric()可能是最好的方法。然后更改值:
$array[$key] = "'" . $value . "'";
将foo/"foo"
变为'foo'/"'foo'"
,依此类推。
答案 3 :(得分:0)
如果你使用mysql-driver:
function escape( $x ) {
return "'" . mysql_real_escape_string($x) . "'";
}
$data = array( "1" => bar, "2" => foo, "3" => 13546 );
echo implode( ',', array_map('escape', $data) );
答案 4 :(得分:-1)
经验证的解决方案对我不起作用。必须是我正在做错的事情,但下面的解决方案对我有用,我在MYSQL IN
子句中使用了结果,因为所有值都需要在该查询中以引用形式出现。
解决方案很简单,它使用引用调用来修改PHP的原始数组值和数组过滤器以循环遍历所有值。
function quote(&$a){
$a='"'.$a.'"';
}
$arr= array('car','bus','truck','bike');
array_filter( $arr,'quote');
echo implode(',', $arr);