Я хочу создать кусок динамического 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'
Используя ваш код, я думаю, что это то, что вы пытаетесь сделать, но поскольку я сказал, что вам не хватает атрибутов.
$s="";
$array = array("12","34");
for($i =0; $i < count($array); $i++)
{
$s .= ",'" . $array[$i] . "'";
}
$sql = "INSERT INTO 'product' ('id','number') VALUES (NULL$s);";
Из того, что я мог понять из вашего вопроса, это могло бы помочь вам достичь того, что вы ищете.
В вашем цикле foreach вы используете
$s .= ',"$val"[$i]';
$ val не конкатенируется корректно
Попробуй это
$s .= ','.$val[$i];
Вы можете разделить значения в массиве с помощью функции implode
Например: $ array [] = 12; $ array [] = 31;
implode (',' $ array) возвращает 12,31
поэтому вы можете использовать $s = ','.implode(','$array);
добиться такого же результата