Конкатенация $sql в функции mysqli_query()

125
28 октября 2019, 22:40

подскажите пожалуйста, почему функция $mysqli->query() не выполняется если произвести конкатенацию переменных?

$sql = "
        INSERT INTO oc_product
        (product_id, model, sku, upc, ean, jan, isbn, mpn, location, quantity, stock_status_id, image, manufacturer_id, shipping, price, points, tax_class_id, date_available, weight, weight_class_id, length, width, height, length_class_id, subtract, minimum, sort_order, status, viewed, date_added, date_modified, dc_label_one, dc_label_two, dc_shortstory)
        VALUES
        ('{$id}', '{$model}', '', '', '', '', '', '', '', '1000', '7', '{$image}', '0', '1', '{$price}', '0', '0', '{$date_available}', '0', '1', '0', '0', '0', '1', '1', '1', '1', '1', '0', '{$date_added}', '{$date_modified}', '', '', '');
    ";
    $sql .= "
        INSERT INTO oc_product_description
        (product_id, language_id, name, description, tag, meta_title, meta_description, meta_keyword)
        VALUES
        ('{$id}', '2', '{$name}', '{$description}', '', '{$name}', '', '');
    ";
$mysqli->query($sql);

Сам SQL запрос прекрасно выполняется, в чём проблема?

Answer 1
Правильный ответ:

Никакой конкатенацией заниматься не нужно. Запросы в которых участвуют переменные, должны выполняться с помощью подготовленных выражений.
Поэтому запросы выполняются по отдельности.

$sql = "INSERT INTO oc_product
    (product_id, model, sku, upc, ean, jan, isbn, mpn, location, quantity, stock_status_id, image, manufacturer_id, shipping, price, points, tax_class_id, date_available, weight, weight_class_id, length, width, height, length_class_id, subtract, minimum, sort_order, status, viewed, date_added, date_modified, dc_label_one, dc_label_two, dc_shortstory)
    VALUES
    (?, ?, '', '', '', '', '', '', '', '1000', '7', ?, '0', '1', ?, '0', '0', ?, '0', '1', '0', '0', '0', '1', '1', '1', '1', '1', '0', ?, ?, '', '', '');
";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("sssssss",$id,$model,$image,$price,$date_available,$date_added,$date_modified);
$stmt->execute();
$sql = "INSERT INTO oc_product_description
    (product_id, language_id, name, description, tag, meta_title, meta_description, meta_keyword)
    VALUES
    (?, '2', ?, ?, '', ?, '', '');
";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("ssss",$id,$name,$description,$name);
$stmt->execute();
READ ALSO
Umi-Cms не выводится картинка в карточке

Umi-Cms не выводится картинка в карточке

Первый раз столкнулся с такой проблемой, так что не топите) На сайте есть меню в виде карточек , в каждой карточке картинка, которая вставляется...

123
Вопрос по $_SESSION

Вопрос по $_SESSION

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

129
Не получается обойти каптчу

Не получается обойти каптчу

Хочу получить результаты из формы на странице https://rosreestrru/wps/portal/p/cc_ib_portal_services/online_request/

168
Генерация hash MCRYPT на nodejs для payeer

Генерация hash MCRYPT на nodejs для payeer

Подскажите как можно сделать такой hash на nodejs

130