Создание таблицы MySQL с помощью цикла foreach PHP - ошибка с синтаксисом

0

Создавая свой собственный веб-сайт электронной коммерции, а внутри back-end ive создала форму, в которой администраторы могут создавать определенные группы фильтров продуктов (например, цвета).

Когда я пытаюсь вставить новую таблицу в базу данных im, используя цикл foreach, чтобы убедиться, что пустые записи не вставлены (и чтобы эти пустые записи не вызывали проблем).

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

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 'entry_date DEFAULT CURRENT_TIMESTAMP)' в строке 1

Мой код:

// GROUP NAME PROVIDED

$group_name = $_POST['g_name'];

// FILTER OPTIONS PROVIDED

$filter_1 = $_POST['filter_1'];
$filter_2 = $_POST['filter_2'];
$filter_3 = $_POST['filter_3'];
$filter_4 = $_POST['filter_4'];
$filter_5 = $_POST['filter_5'];
$filter_6 = $_POST['filter_6'];
$filter_7 = $_POST['filter_7'];
$filter_8 = $_POST['filter_8'];
$filter_9 = $_POST['filter_9'];
$filter_10 = $_POST['filter_10'];
$filter_11 = $_POST['filter_11'];

include '../connection.php';

$query = "CREATE TABLE $group_name (
entry_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(255) NOT NULL,
product_id VARCHAR(255) NOT NULL,";

$newarray = array($filter_1,$filter_2,$filter_3,$filter_4,$filter_5,$filter_6,$filter_7,$filter_8,$filter_9,$filter_10,$filter_11);

    // For each value that is not NULL
    foreach ($newarray as $key => $value) {
        if (is_null($value) === false) {
            $new_array[$key] = $value;
            echo $value;

           $query = "$value VARCHAR(255) NOT NULL,";

        }

    }

$query= "entry_date DEFAULT CURRENT_TIMESTAMP)";

// Checking if query was successful or not

if (mysqli_query($connection, $query )) {
    echo "Table created successfully";
} else {
    echo "Error creating table: " . mysqli_error($connection);
}

mysqli_close($connection);

Я пробовал разные варианты вставки timestamp, но не повезло.

Стоит отметить, что я также разделил свой запрос так, чтобы можно было включить цикл foreach.

Любая помощь будет оценена!

PS Я знаю, что этот код открыт для SQL-инъекции, я хочу, чтобы он работал, прежде чем сделать его безопасным!

Благодарю. Стэн.

Рабочий код:

// GROUP NAME PROVIDED

$group_name = $_POST['g_name'];

// FILTER OPTIONS PROVIDED

$filter_1 = $_POST['filter_1'];
$filter_2 = $_POST['filter_2'];
$filter_3 = $_POST['filter_3'];
$filter_4 = $_POST['filter_4'];
$filter_5 = $_POST['filter_5'];
$filter_6 = $_POST['filter_6'];
$filter_7 = $_POST['filter_7'];
$filter_8 = $_POST['filter_8'];
$filter_9 = $_POST['filter_9'];
$filter_10 = $_POST['filter_10'];
$filter_11 = $_POST['filter_11'];

include '../connection.php';

$query = "CREATE TABLE $group_name (
entry_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(255) NOT NULL,
product_id VARCHAR(255) NOT NULL,";

$newarray = array($filter_1,$filter_2,$filter_3,$filter_4,$filter_5,$filter_6,$filter_7,$filter_8,$filter_9,$filter_10,$filter_11);

$filtered_array = array_filter($newarray);

    // For each value that is not NULL
    foreach ($filtered_array as $key => $value) {

            $filtered_array[$key] = $value;
            echo $value;

           $query .= "$value VARCHAR(255) NOT NULL,";       


    }

$query .= "entry_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP)";

echo "<br><br>".$query;

// Checking if query was successful or not

if (mysqli_query($connection, $query )) {
    echo "Table created successfully";
} else {
    echo "Error creating table: " . mysqli_error($connection);
}

mysqli_close($connection);
  • 1
    $query= "entry_date DEFAULT CURRENT_TIMESTAMP)"; => $query .= "entry_date DEFAULT CURRENT_TIMESTAMP)"; просто пропустить точку здесь и, возможно, внутри цикла тоже.
  • 0
    Можете ли вы распечатать инструкцию SQL (возможно, в вашем обработчике ошибок)?
Показать ещё 5 комментариев
Теги:
foreach

2 ответа

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

вам не хватает типа:

entry_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP

или же

entry_date DATETIME DEFAULT CURRENT_TIMESTAMP
  • 0
    Это то, что вызывало проблему, я обновил код, и теперь он создает таблицы. Спасибо, Филипп!
0

вы перезаписываете переменную $ query

использование =. если вы хотите скопировать данные в строку

$query =. "entry_date DEFAULT CURRENT_TIMESTAMP)";

купите, как это не очень хороший стиль, чтобы хранить его так

Ещё вопросы

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