变量字符串串联和插值,字符串存储在数组中


Variable string concatenation and interpolation, string is stored in array

我希望创建一个动态 SQL,其中字符串变量的值用作 SQL 字符串中的变量:

"INSERT INTO `product` (`id`,`number`) VALUES (NULL,'1234');"

这行得通。

但是,我需要做的是拥有"变量"?

所以在前面的代码中:

foreach($array as $val)
{
    $s .= ',"$val"[$i]';
}

这将创建字符串:

s = ,'$val[0]','$val[1]'

作为 SQL 字符串插入时:

"INSERT INTO `product` (`id`,`number`) VALUES (NULL,$s);" 

它返回:

"INSERT INTO `product` (`id`,`number`) VALUES (NULL,'$val[0]','$val[1]');"

而它应该返回:

    "INSERT INTO `product` (`id`,`number`) VALUES (NULL,'12','34');"

这是非常字面的,因为MySQL插入处于循环中,其中$val是数组值,[0]是键。

我不确定这对任何人都有意义,因为我正在努力解决这个问题,如果我的问题含糊不清或根本没有任何意义,请告诉我。

谢谢

缺口

你使用的是单引号,所以没有进行字符串插值,如果你想插值字符串,你必须使用双引号"$var"

$arr = array( 1,2,3);
$i = 0;
echo '$arr[0]'; // prints: $arr[0]    <== Your error is here
echo "$arr[0]"; // prints: 1

更好的方法

无论如何,您可能喜欢这样做:

$array = array(12, 34);    
$s = implode("', '", $array);  // $s is: 12', '34
$s = ", '$s'";                 // $s is: '12', '34'
echo $s;  // prints: , '12', '34'

从我从你的问题中可以理解的,这可能有助于你实现你想要的东西。

在你正在使用的 foreach 循环上

$s .= ',"$val"[$i]';

$val未以正确的方式连接

试试这个

$s .= ','.$val[$i];

您可以使用内爆功能按 拆分数组中的值

例如: $array[] = 12; $array[] = 31;

implode(','$array) 返回 12,31

因此,您可以使用$s = ','.implode(','$array);来获得相同的结果

使用您的代码,我认为这就是您要做的,但正如我所说,您缺少属性。

$s="";
$array = array("12","34");
for($i =0; $i < count($array); $i++)
{
    $s .= ",'" . $array[$i] . "'";
}
$sql = "INSERT INTO `product` (`id`,`number`) VALUES (NULL$s);";