MySQL cho tôi một lỗi cú pháp


1

Tôi có một vấn đề với truy vấn MySQL của tôi. Tôi gặp một lỗi mà tôi không thể sửa, và vẫn cần một số trợ giúp. Đây là mã của tôi trong tập lệnh PHP của tôi (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.';
    }
}

?>

Đây là lỗi mà tôi đang nhận được:

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

Đây là cấu trúc cơ sở dữ liệu của tôi: Hình ảnh cấu trúc DB của tôi

Tôi không biết phải làm gì. Tôi đang phát triển một ứng dụng và tôi không thể tiếp tục mà không khắc phục vấn đề này trước đó. Cảm ơn trước.

(Nếu ai biết cách làm cho mã khác tốt hơn, vui lòng sửa tôi, tôi không phải là người chuyên nghiệp, tôi chỉ mới 15 tuổi: P)

EDIT 2: Nếu bất cứ ai có thể giúp tôi về một điều khác, tôi sẽ nhận được một cảnh báo về dòng này:

$rows = mysql_numrows($mysql);

Tôi phải đổi nó thành $rows = @mysql_numrows($mysql); vì vậy nó sẽ không hiển thị cảnh báo, nhưng nó vẫn là một cảnh báo, và nếu có ai đủ tử tế để giúp tôi giải quyết nó, xin vui lòng làm. Cảm ơn một lần nữa.


Cái gì messages Bàn trông như thế nào? Là fromto số hay chuỗi?
n0pe

Tôi viết lại toàn bộ câu hỏi và đính kèm một liên kết đến một hình ảnh. Tôi có thể cung cấp toàn bộ kết xuất SQL của bảng đó. Tôi mới tạo ra nó ngày hôm qua. Cảm ơn.
Vlad

Từ from (tên cột của bạn) là một từ dành riêng. Bạn cần đặt backticks xung quanh nó như thế này `from`. Bạn cũng sẽ muốn đặt các trích dẫn đơn xung quanh các biến trong chuỗi SQL.
n0pe

@MaxMackie, hoạt động. Cảm ơn. Nếu bạn muốn, hãy trả lời và tôi sẽ chọn nó.
Vlad

Vui mừng nó đã làm việc cho bạn, tôi đã thêm nhận xét của tôi như là một câu trả lời.
n0pe

Câu trả lời:


1

Từ từ (tên cột của bạn) là một từ dành riêng. Bạn cần đặt backticks xung quanh nó như thế này `from`. Bạn cũng sẽ muốn đặt các trích dẫn đơn xung quanh các biến trong chuỗi SQL.


1

Khi bạn sử dụng Từ dành riêng đối với các tên cột trong MySQL sử dụng backticks tức là `để thoát.

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

Vẫn nhận được cùng một lỗi. Tôi sẽ chỉnh sửa câu hỏi của tôi ngay bây giờ và thêm cấu trúc mã + DB của tôi.
Vlad

Chỉ cần chỉnh sửa câu hỏi. Mong chờ một câu trả lời. : D
Vlad

@ Vlad1k bạn nên hỏi một câu hỏi mới thay vì chỉnh sửa câu hỏi hiện có
david strachan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.