【问题标题】:Error while doing PHP mysqli insert into table执行 PHP mysqli 插入表时出错
【发布时间】:2023-03-04 08:21:01
【问题描述】:

我有表格列

log_id
作为primary_key auto_increment。

是否需要在 INSERT INTO 语句中指定?

我在尝试将值插入数据库时​​遇到下一个错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 '(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    

感谢您的帮助。

【问题讨论】:

  • 更改为INSERT INTO my_log (log_session,log_ip,log_vrijeme,log_model)...

标签: php mysql mysqli error-handling


【解决方案1】:

你应该把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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多