MySQL给我一个语法错误


1

我的MySQL查询有问题。我收到一个我无法修复的错误,仍然需要一些帮助。这是我的PHP脚本(show_messages.php)中的代码:

<?php
include_once 'config.php';
$username = @$_GET['user'];
$password = @$_GET['password'];
$message_from = @$_GET['from'];
$message_to = @$_GET['to'];

if(($login = login($username, $password)) != 1) {
    echo $login; // return the value of the error
    exit;
} else {
    $mysql = mysql_query("SELECT * FROM messages WHERE from LIKE $message_from AND to LIKE $message_to ORDER BY time ASC LIMIT 50");
    $rows = @mysql_numrows($mysql);
    echo 'MySQL Error: ' . mysql_error().'<br/>';
    if($rows > 0) {
        $i = 0;
        while($i < $rows) {
            $result_content = mysql_result($mysql, $i, 'content');
            $result_from = mysql_result($mysql, $i, 'from');
            echo $result_from.'<br/>'.$result_content.'<br/><br/>';
            $i++;
        }
    } else {
        echo 'No messages.';
    }
}

?>

这是我得到的错误:

MySQL Error: 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 'from LIKE 8 AND to LIKE 1 ORDER BY time ASC LIMIT 50' at line 1

这是我的数据库结构:我的数据库结构的 图像

我不知道该怎么办。我正在开发一个应用程序,但如果没有事先解决此问题,我将无法继续前进。提前致谢。

(如果有人知道如何使其他代码更好,请随时纠正我,我不是专业人士,我只有15岁:P)

编辑2: 如果有人可以在另一件事上帮助我,我会在这条线上收到警告:

$rows = mysql_numrows($mysql);

我必须将其更改为$rows = @mysql_numrows($mysql);不会显示警告的内容,但这仍然是警告,如果有人足够帮助我解决问题,请这样做。再次感谢。


什么是messages台什么样子的?是fromto数字或字符串?
n0pe

我重写了整个问题,并在图像上附加了一个链接。我可以提供该表的整个SQL转储。我昨天创建的。谢谢。
弗拉德

该字from(您的列名)是保留字。您需要像这样围绕它`from`。您还需要在SQL字符串中的变量周围加上单引号。
13年

@MaxMackie,有效。谢谢。如果需要,请回答,我将选择它。
弗拉德

很高兴为您服务,我补充了我的评论作为答案。
13年

Answers:


1

来自(您的列名)的单词是保留单词。您需要像这样围绕它`from`。您还需要在SQL字符串中的变量周围加上单引号。


1

当您在MySQL中使用保留字作为列名时,请使用反引号,即`进行转义。

SELECT * FROM messages WHERE from=`8` AND to=`1` ORDER BY time ASC LIMIT 50

仍然出现相同的错误。我现在要编辑我的问题,并添加我的代码+ DB结构。
弗拉德

刚刚编辑了问题。期待一个答案。:D
Vlad13年

@ Vlad1k你应该问一个新的问题,而不是编辑现有的问题
大卫·斯特朗
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.