Ошибка при выполнении вставки PHP MySQL в таблицу - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть столбец таблицы

log_id
в качестве primary_key auto_increment.

Нужно ли указывать его в инструкции INSERT INTO или нет?

Я получаю следующую ошибку при попытке вставить значения вмоя база данных:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(log_session,log_ip,log_vrijeme,log_model) my_log VALUES ('270043ae1526e4' at line 1 INSERT INTO (log_session,log_ip,log_vrijeme,log_model) my_log VALUES ('270043ae1526e44967889b4382ff69fd','93.142.54.135','2018-11-23 14:06:15','1402')

Мой код:

<?php
$_SESSION['compare_hash'] = "270043ae1526e44967889b4382ff69fd";

$log_session = $_SESSION['compare_hash'];
$log_ip = $_SERVER['REMOTE_ADDR'];
$log_vrijeme = date("Y-m-d H:i:s");
$log_model = "1402";

$con = mysqli_connect("localhost","user","password","databse");
$sql = "
    INSERT INTO (log_session,log_ip,log_vrijeme,log_model) my_log
    VALUES ('$log_session','$log_ip','$log_vrijeme','$log_model')
";
$rez = mysqli_query($con, $sql) or die(mysqli_error($con)."<br>$sql");
mysqli_close($con);
?>

Структура таблицы:

Field           Type       Null    Key  Default     Extra   
log_id          int(11)     NO     PRI  NULL     auto_increment
log_session     varchar(42) NO     MUL  NULL    
log_ip          varchar(15) NO          NULL    
log_vrijeme     datetime    NO     MUL  NULL    
log_model       int(11)     NO     MUL  NULL    

Спасибо за помощь.

1 Ответ

0 голосов
/ 23 ноября 2018

Вы должны поставить my_log сразу после INSERT INTO:

<?php
$_SESSION['compare_hash'] = "270043ae1526e44967889b4382ff69fd";

$log_session = $_SESSION['compare_hash'];
$log_ip = $_SERVER['REMOTE_ADDR'];
$log_vrijeme = date("Y-m-d H:i:s");
$log_model = "1402";

$con = mysqli_connect("localhost","user","password","databse");
$sql = "
    INSERT INTO my_log (log_session,log_ip,log_vrijeme,log_model)
    VALUES ('$log_session','$log_ip','$log_vrijeme','$log_model')
";
$rez = mysqli_query($con, $sql) or die(mysqli_error($con)."<br>$sql");
mysqli_close($con);
?>

Однако у вашего кода есть несколько недостатков, я опишу их чуть позже.

1. Не передавайтенеэкранированные переменные в запросе

Пока у вас нет другого пути.Использование mysqli_real_escape_string($con, $your_var) для предотвращения внедрения SQL-кода и использование PDO сделало бы его еще лучше.

2. Используйте синтаксис HEREDOC для обеспечения согласованности запросов при будущих изменениях

Таким образом, даже если кто-то из вас введет " в запросон все равно будет работать, как и ожидалось.

3. Пропустите закрывающий тег в конце ваших файлов PHP, если у вас нет содержимого ниже

Это предотвратит неожиданные ошибки.

<?php
$_SESSION['compare_hash'] = "270043ae1526e44967889b4382ff69fd";
$con = mysqli_connect("localhost","user","password","databse");

$log_session = mysqli_real_escape_string($con, $_SESSION['compare_hash']);
$log_ip = mysqli_real_escape_string($con, $_SERVER['REMOTE_ADDR']);
$log_vrijeme = mysqli_real_escape_string($con, date("Y-m-d H:i:s"));
$log_model = mysqli_real_escape_string($con, "1402");

$sql = <<<SQL
    INSERT INTO my_log (log_session,log_ip,log_vrijeme,log_model)
    VALUES ('${log_session}','${log_ip}','${log_vrijeme}','${log_model}')
SQL;

$rez = mysqli_query($con, $sql) or die(mysqli_error($con)."<br>$sql");
mysqli_close($con);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...