MySQL me dando um erro de sintaxe

1

Eu tenho um problema com minha consulta do MySQL. Eu recebo um erro que não posso corrigir e ainda preciso de ajuda. Este é o meu código no meu script 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.';
    }
}

?>

Este é o erro que estou recebendo:

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

Esta é a estrutura do meu banco de dados: Imagem da minha estrutura de banco de dados

Eu não sei o que fazer. Estou desenvolvendo um aplicativo e simplesmente não consigo seguir em frente sem corrigir esse problema de antemão. Agradecemos antecipadamente.

(Se alguém souber como melhorar o código, sinta-se à vontade para me corrigir, não sou profissional, tenho apenas 15 anos de idade: P)

EDIT 2: Se alguém puder me ajudar em outra coisa, estou recebendo um aviso nesta linha:

$rows = mysql_numrows($mysql);

Eu tenho que mudar isso para $rows = @mysql_numrows($mysql); , então ele não mostrará o aviso, mas ainda é um aviso, e se alguém tiver a gentileza de me ajudar a resolvê-lo, por favor, faça. Obrigado novamente.

    
por Vlad 22.06.2013 / 19:40

2 respostas

1

A palavra de (nome da sua coluna) é uma palavra reservada. Você precisa colocar backticks em torno dele assim 'from' . Você também vai querer colocar aspas simples em torno das variáveis na string SQL.

    
por 24.06.2013 / 14:01
1

Quando você usa Reservado Palavras para nomes de coluna no MySQL usam backticks, ou seja, 'para escapar.

SELECT * FROM messages WHERE from='8' AND to='1' ORDER BY time ASC LIMIT 50
    
por 22.06.2013 / 21:04

Tags