php - 通过 HTML 表单插入数据的 SQL Near 错误

标签 php mysql syntax

我一直在尝试将一些数据插入事件页面的数据库中。我有一个 html 表单和一个单独的脚本,如下所示,提交似乎通过了 ename idimgsrc 值,但什么也没有过去了。如果再多的话,我会收到一条 You have an error in your SQL Syntax;检查与您的 MySQL 服务器版本相对应的手册,了解在 'when、descr、positions) 附近使用的正确语法 VALUES (test, 1 ,www.vzdc.org, 2017-1-20 23:59:00' at line 1我已经做了一些研究,但也许这只是我的一个奇怪的错误?我对 mysql 相当陌生,我希望得到一些帮助!谢谢,代码如下。

<!-- HTML form -->
 <form id="newevent" action="insertevent.php" method="post">
                <p>Event Name:</p><input name="ename" type="text" width="100">
                <p>ID:</p><input name="id" type="text" size="5">
                <p>Banner Link:</p><input name="imgsrc" type="text" size="50">
                <p>Description</p><input name="descr" type="text" height="1000px" >
                <p>Date / Time (yyyy-mm-dd HH:MM:SS):</p><input name="when" type="text">
                <p>Positions (ONE per line)</p><textarea name="positions" form="newevent" rows="10" cols="50"></textarea><br>
                <input value="Add Event" type="submit">
            </form>

/* PHP script on insertevent.php */
<?php
$link = mysqli_connect("localhost", "root", "xxx", "xxx");

// Check connection
if($link === false){
    die("ERROR: Could not connect. " . mysqli_connect_error());
}

// Escape user inputs for security
$ename = mysqli_real_escape_string($link, $_POST['ename']);
$id = mysqli_real_escape_string($link, $_POST['id']);
$imgsrc = mysqli_real_escape_string($link, $_POST['imgsrc']);
$when = mysqli_real_escape_string($link, $_POST['when']);
$descr = mysqli_real_escape_string($link, $_POST['descr']);
$positions = mysqli_real_escape_string($link, $_POST['positions']);

// attempt insert query execution
$sql = "INSERT INTO events (ename, id, imgsrc, when, descr, positions) VALUES (`$ename`, $id , `$imgsrc`, `$when`, `$descr`, `$positions`)";
if(mysqli_query($link, $sql)){
    echo "Records added successfully.";
} else{
    echo "ERROR: Could not execute $sql. " . mysqli_error($link);
}

// close connection
mysqli_close($link);
?>

最佳答案

不要使用反引号将变量绑定(bind)到查询,而是使用单引号。您可以对表名和列名使用反引号:

INSERT INTO `events` (`ename`, `id`, `imgsrc`, `when`, `descr`, `positions`) 
VALUES ('$ename', '$id', '$imgsrc', '$when', '$descr', '$positions')

WHEN也是一个保留字,最好改个名字。

由于您已经在使用 mysqli_* API,请检查 prepared statement

关于php - 通过 HTML 表单插入数据的 SQL Near 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41540793/

相关文章:

php - 部署到 Netlify 时出现日期语言问题

mysql - 提交时点击在 umbraco 中出现问题

mysql - sql插入时如何抑制唯一键检查

git - 'git push foo bar -f' 和 'git push foo +bar' 和有什么区别?

c++ - 无法使用 *p1/*p2,因为它正在考虑/* 作为评论部分的开始

php - 如何使用 PHP 在 mysql 数据库中导入 .sql 文件?

php - 使用 CodeIgniter form_validation 规则 is_unique 加载多个数据库

php - 如何声明全局变量并初始化

mysql - 质心方法是否在 MySQL 空间中实现?

python - 使用 Python 求解 5 阶多项式