【问题标题】:MySQL Syntax error on Insert Query from PHP从 PHP 插入查询的 MySQL 语法错误
【发布时间】:2013-07-15 03:34:41
【问题描述】:

我在来自 PHP 的 MYSQL 查询中收到非描述性语法错误。如果我“回显”查询文本并将其粘贴到 MySQL 查询窗口中,则代码有效。这是查询的 SQL、错误代码和错误消息...

INSERT INTO ADVERTISEMENTS (`user_id`, `ad_name`, `click_url`, `img_url`, `bg_color`, `start_date`, `end_date`, `timer_delay`, `add_date`) VALUES (2, 'Test New Ad', 'http://www.google.com', 'red_arrow.png', '#000000', '1980-05-11 00:00:00', '2020-05-01 00:00:00', 5, '2013-07-14 22:21:59'); 

错误代码:1064
错误消息:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 1 行的 '' 附近使用

这是我正在使用的 PHP 代码...

$link = mysqli_connect($UM_Settings["database_options"]["server_name"], $UM_Settings["database_options"]["username"], $UM_Settings["database_options"]["password"], $UM_Settings["database_options"]["database_name"]);

$advertisementNameNew = mysqli_real_escape_string($link, $_POST['advertisementNameNew']);
$destinationURLNew = mysqli_real_escape_string($link, $_POST['destinationURLNew']);
$dropboxUploadFile = mysqli_real_escape_string($link, $_POST['dropboxUploadFile']);
$backgroundColorNew = mysqli_real_escape_string($link, $_POST['backgroundColorNew']);
$bannerStartDateNew = DateStringToMySQL($_POST['bannerStartDateNew']);
$bannerEndDateNew = DateStringToMySQL($_POST['bannerEndDateNew']);
$bannerSetTimerNew = intval($_POST['bannerSetTimerNew']);
$tmpUserID = UM_GetCookie("UM_UserID");
$tmpAddDate = DateStringToMySQL('now');

echo "INSERT INTO ADVERTISEMENTS(`user_id`, `ad_name`, `click_url`, `img_url`, `bg_color`, `start_date`, `end_date`, `timer_delay`, `add_date`) VALUES ($tmpUserID, '$advertisementNameNew', '$destinationURLNew', '$dropboxUploadFile', '$backgroundColorNew', '$bannerStartDateNew', '$bannerEndDateNew', $bannerSetTimerNew, '$tmpAddDate');<br />";

if (!mysqli_query($link, "INSERT INTO ADVERTISEMENTS(`user_id`, `ad_name`, `click_url`, `img_url`, `bg_color`, `start_date`, `end_date`, `timer_delay`, `add_date`) VALUES ($tmpUserID, '$advertisementNameNew', '$destinationURLNew', '$dropboxUploadFile', '$backgroundColorNew', '$bannerStartDateNew', '$bannerEndDateNew', $bannerSetTimerNew, '$tmpAddDate');")) {
    printf("Error Code: %s\n",  mysqli_errno($link));
    echo "<br />";
    printf("Error Msg: %s\n",  mysqli_error($link));
}

我知道数据库连接正常。我能够选择和更新表格。我还可以使用不同的查询插入到其他表中。

我愿意接受任何建议。

提前感谢您的帮助!

【问题讨论】:

  • 请在插入查询之前回显所有变量,以便您知道值是否丢失。
  • 我认为你没有使用mysqli the good way;我注意到您以 ; 结束了您的声明,这在 API 调用中可能不是必需的。
  • 试试(accent)ADVERTISEMENTS(accent)丢掉 ;最后...在您回显该行的位置将其存储到变量echo $query = "INSERT INT.... 然后在您的if(!(mysqli_query($link,$query))){}
  • 你能告诉我 DateStringToMySQL 函数返回什么吗?另外,更改查询中使用的引号并尝试。

标签: php mysql


【解决方案1】:

我在您的查询字符串中发现了一些错误。

首先,所有变量都作为文字字符串传递:“... VALUES ($tmpUserID, '$advertisementNameNew', ..." 应该是 "... VALUES (".$tmpUserID.", '"。 $advertisementNameNew."', ...".

其次,我看到 $bannerSetTimerNew 周围缺少引号。

第三,还有一个额外的;。

这是我将如何编写查询:

if (!mysqli_query($link, "INSERT INTO ADVERTISEMENTS (user_id, ad_name, click_url, img_url, bg_color, start_date, end_date, timer_delay, add_date) VALUES (".$tmpUserID.", '".$advertisementNameNew."', '".$destinationURLNew."', '".$dropboxUploadFile."', '".$backgroundColorNew."', '".$bannerStartDateNew."', '".$bannerEndDateNew."', '".$bannerSetTimerNew."', '".$tmpAddDate."')")) { ...

虽然我没有测试它。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    我在查询末尾看到 ;。你确定应该在那里吗?

    【讨论】:

      【解决方案3】:

      有两件事 1.删​​除;从查询的末尾开始。 2. 我希望 timer_delay 字段的数据类型为“Int”,如果它是 VARCHAR,那么您必须为该字段值加上引号。

      我希望这会有所帮助。

      【讨论】:

        【解决方案4】:

        路人,谢谢你的评论。这是我第一次使用 mysqli,我将查询更改为使用“bind_param”方法,现在一切正常。对于其他有类似问题的人,这里是更正的代码...

                $mysqli = new mysqli($UM_Settings["database_options"]["server_name"], $UM_Settings["database_options"]["username"], $UM_Settings["database_options"]["password"], $UM_Settings["database_options"]["database_name"]);
            if ($mysqli->connect_errno) {
                echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
            }
        
            $advertisementNameNew = $_POST['advertisementNameNew'];
            $destinationURLNew = $_POST['destinationURLNew'];
            $dropboxUploadFile = $_POST['dropboxUploadFile'];
            $backgroundColorNew = $_POST['backgroundColorNew'];
            $bannerStartDateNew = DateStringToMySQL($_POST['bannerStartDateNew']);
            $bannerEndDateNew = DateStringToMySQL($_POST['bannerEndDateNew']);
            $bannerSetTimerNew = intval($_POST['bannerSetTimerNew']);
            $tmpUserID = UM_GetCookie("UM_UserID");
            $tmpAddDate = DateStringToMySQL('now');
        
            /* Prepared statement, stage 1: prepare */
            if (!($stmt = $mysqli->prepare("INSERT INTO `ADVERTISEMENTS` (`user_id`, `ad_name`, `click_url`, `img_url`, `bg_color`, `start_date`, `end_date`, `timer_delay`, `add_date`) VALUES (?,?,?,?,?,?,?,?,?)"))) {
                echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
            }
        
            if (!$stmt->bind_param("issssssis",$tmpUserID, $advertisementNameNew, $destinationURLNew, $dropboxUploadFile, $backgroundColorNew, $bannerStartDateNew, $bannerEndDateNew, $bannerSetTimerNew, $tmpAddDate)) {
                echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;
            }
        
            if (!$stmt->execute()) {
                echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
            }
        
        
            $_GET['ad_id'] = $stmt->insert_id;
            $stmt->close(); 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-08-20
          • 1970-01-01
          • 1970-01-01
          • 2013-03-13
          • 2018-11-10
          • 1970-01-01
          • 2011-08-18
          • 1970-01-01
          相关资源
          最近更新 更多