2011-09-06 36 views
0

我有一个PHP函数2输出如下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', 
) 

,现在我想请执行以下操作.. 如何更换“?”在值为value1,value2和value3的第一个INSERT QUERY中,第二个查询中的值与第二个数组中的值相同。

问候

+4

参考子指数这似乎喜欢的事,自动通过类似[PDO](http://php.net/PDO)的方式完成。 –

+0

如果这是一个选项,您应该使用PDO。 – Quasdunk

回答

1

通用的解决方案:

function replaceWithArray($query, $array) { 
    $n = 0; 
    return preg_replace('~\?~e', '$array[$n++]', $query); 
} 

example on Codepad

注意:如果要更换?只介乎括号,使用这样的回顾后:preg_replace('~\?(?=[^\(\)]*\))~e', '$array[$n++]', $query);

+0

谢谢,这一个应该工作...但不知道我做错了什么,每个?通过信件接受..i.e。 v,a,l,u,e .... 1,v,a,l ... – geej

+0

看看我在[codepad]上的示例(http://codepad.org/OxgC18Ms)。你的数组必须是这样的:'array('value1','value2',...)'。就像你的问题一样。你在'print_r'你的数组时有什么? –

+0

我的数组如下所示..但我使用foreach来单独获取值并将它变为一个变量..然后我有另一个SQL语句?在一个变量中..现在当我尝试你给的东西时,每个问题都需要逐字逐句,而不是整个值。我有一个函数,让这两个输出(数组和SQL ..),并在那我想替换每个?与价值...例如,我得到4阵列作为输出,我有4匹配的SQL,所以每件事情应该?应该用价值代替。如果我第一次不清楚的话。 阵列=( 1 => 'VALUE1', 2 => '值2',3 => '值3', ) – geej

0
$foo = implode("','",$array); 
INSERT INTO "table1" ('column1', 'column2', 'column3') VALUES ('$foo') 
1

这确切sollution可以做这样的:

$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
echo $query1 =str_replace("?,?,?","'".implode("','",$values1)."'",$query1); 
echo $query2 =str_replace("?,?,?","'".implode("','",$values2)."'",$query2); 
1

如果您使用的是,???在select语句中,它是元语法的,MySQL将在运行时用实际值替换这些变量。如果你的格式是可变的,这可能是危险的,但如果你使用的是静态数据,MySQL的第一个猜测将始终是正确的,如果它正确对齐开始。

根据Php 5.x手册有一个函数调用这个array_replace,奇怪的是看起来很像你的例子。我运行PHP 5.2和服务器始终只是拒绝在该函数调用就像这样:

致命错误:调用未定义功能array_replace()

但CLI和mod_php的是后5.2xx

[root @ networktag dom]#php -i | grep的-i版本 PHP版本=> 5.2.10

现在同时在http://php.net/manual/en/function.array-replace.php的例子说,以取代阵列这样,直到谁创建的编程语言解释赶上谁写它似乎并没有手动在安装了CentOS数据中心的Linux机器上运行CentOS 5.2,使用PhP rpmforge升级到5.2。这真的是自PHP 5.x的+支持阵列解引用,像这样一个模拟点:

$array_1 = array('Tom','Dick','Harry'); 
$array_1[1] = "Car 54"; 
print_r($array_1); 

输出: 阵列 ( [0] =>汤姆 [1] =>车54 [2 ] => Harry )

如果您需要更精细的控制权来取消引用或替换数组值,则不要依赖主数组中的默认索引。创建一个增量计数器,然后使用它转换数组索引,例如$ array [$ i] = array(“Foo”=>“Bar”,“Bar”=>“Foo”); $ i是$ i ++。

...或...如果你使用的是PHP的一个较新的版本,你甚至可以从逻辑边界外侧

print_r($array[$i])(0); 

:)