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.
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.
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
Tags mysql