Конкатенация и интерполяция переменной строки, строка сохраняется в массиве

0

Я хочу создать кусок динамического 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] - это ключ.

Я не уверен, что это имеет смысл для кого-либо, поскольку я изо всех сил пытаюсь обвести вокруг себя голову, пожалуйста, дайте мне знать, если мой вопрос нечеткий или просто не имеет никакого смысла.

благодаря

Ник

  • 0
    Вы пытаетесь сделать несколько вставок в продукты? Или вам не хватает атрибутов таблицы? Потому что для каждого значения вам нужен атрибут, чтобы войти в него.
  • 0
    Вы не указали, является ли это MySQL, но я предполагаю, что это так. Вы должны использовать привязку параметров с PDO или mysqli . Это, наряду с циклическим просмотром ассоциативного массива, вероятно, сделает то, что вы хотите.
Теги:
arrays
variables
insert

3 ответа

1
Лучший ответ

Вы используете одинарные кавычки, поэтому интерполяция строк не выполняется, если вы хотите, чтобы строки интерполировались, вам нужно использовать двойные кавычки "$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'
0

Используя ваш код, я думаю, что это то, что вы пытаетесь сделать, но поскольку я сказал, что вам не хватает атрибутов.

$s="";

$array = array("12","34");

for($i =0; $i < count($array); $i++)
{
    $s .= ",'" . $array[$i] . "'";
}

$sql = "INSERT INTO 'product' ('id','number') VALUES (NULL$s);";
0

Из того, что я мог понять из вашего вопроса, это могло бы помочь вам достичь того, что вы ищете.

В вашем цикле foreach вы используете

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

$ val не конкатенируется корректно

Попробуй это

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

Вы можете разделить значения в массиве с помощью функции implode

Например: $ array [] = 12; $ array [] = 31;

implode (',' $ array) возвращает 12,31

поэтому вы можете использовать $s = ','.implode(','$array); добиться такого же результата

Ещё вопросы

Сообщество Overcoder
Наверх
Меню