我有一个php函数的输出,如下所示
首先输出给我一些这样的东西
INSERT INTO "table1" ('column1', 'column2', 'column3') VALUES (?,?,?)
INSERT INTO "table2" ('column1', 'column2', 'column3','column4','column5') VALUES (?,?,?,?,?)
其他输出提供
Array = (
1 => 'value1',
2 => 'value2',
3 => 'value3',
)
Array = (
1 => 'value1',
2 => 'value2',
3 => 'value3',
4 => 'value4',
5 => 'value5',
)
现在我想做以下事情.. 我该如何更换“?”在第一个INSERT QUERY中,值为value1,value2和value3,第二个查询第二个数组中的值的方式相同。
问候
答案 0 :(得分:2)
echo $query1 =str_replace("?,?,?","'".implode("','",$values1 )."'",$query1);
echo $query2 =str_replace("?,?,?","'".implode("','",$values2 )."'",$query2);
答案 1 :(得分:1)
这种精确的溶解可以这样完成:
$query1 = "INSERT INTO `table1` (`column1`, `column2`, `column3`) VALUES (?,?,?)";
$query2 = "INSERT INTO `table2` (`column1`, `column2`, `column3`,`column4`,`column5`) VALUES (?,?,?,?,?)";
$values1 = array("value1","value2","value3");
$values2 = array("value1","value2","value3","value4","value5");
function insertIntoQuery($query, $values){
$countval = count($values);
$replace = array();
for($i=0; $i<$countval; $i++){
$replace[] = '?';
}
$implode = implode(",", $replace);
$values = implode("','", $values);
$query = str_replace($implode, "'".$values."'", $query);
return $query;
}
echo insertIntoQuery($query1, $values1);
echo "<br />";
echo insertIntoQuery($query2, $values2);
答案 2 :(得分:1)
通用解决方案:
function replaceWithArray($query, $array) {
$n = 0;
return preg_replace('~\?~e', '$array[$n++]', $query);
}
注意:如果您只想在括号内替换?
,请使用这样的lookbehind:preg_replace('~\?(?=[^\(\)]*\))~e', '$array[$n++]', $query);
答案 3 :(得分:1)
如果您使用的是?,?,?在select语句中,它是元语法,MySQL将在运行时用实际值替换这些变量。如果您的格式是可变的,这可能会很危险,但是如果您使用的是静态数据,那么MySQL的第一个猜测将始终是正确的,如果它在开始时正确对齐的话。
根据Php 5.x手册,这个array_replace有一个函数调用,奇怪的是看起来很像你的例子。我正在运行PHP 5.2并且服务器总是只是拒绝这样的函数调用:
致命错误:调用未定义的函数array_replace()
但CLI和mod_php都是5.2xx后的
[root @netnettag dom] #php -i | grep -i版本 PHP版本=&gt; 5.2.10
现在虽然http://php.net/manual/en/function.array-replace.php上的示例说这样替换数组,直到创建编程语言解释器的人赶上了编写手册的人,它似乎没有在vanilla数据中心安装Linux盒子上运行带有PhP rpmforge的CentOS 5.2升级到5.2。自从Php 5.x +支持数组取消引用以来,它确实是一个没有实际意义的点:
$array_1 = array('Tom','Dick','Harry');
$array_1[1] = "Car 54";
print_r($array_1);
输出: 排列 ( [0] =&gt;汤姆 [1] =&gt;车54 [2] =&gt;掠夺 )
如果在取消引用或替换数组值时需要更精细的控制,则不要依赖主数组中的默认索引。创建一个增量计数器,然后用它来转换数组索引,例如$ array [$ i] = array(“Foo”=&gt;“Bar”,“Bar”=&gt;“Foo”);其中$ i是$ i ++。
...或者......如果您使用的是较新版本的Php,您甚至可以从逻辑边界外引用子索引
print_r($array[$i])(0);
:)
答案 4 :(得分:0)
$foo = implode("','",$array);
INSERT INTO "table1" ('column1', 'column2', 'column3') VALUES ('$foo')