我正在尝试搜索包含特定字符串的行。为此,我使用以下查询:
SELECT `1` as 'msgTime',
`4` as 'shout'
FROM log.shout_log' WHERE shout LIKE '".$name."' ORDER BY 1 DESC
我得到$name
从:
$name = $_GET['name'];
我的网址:/shout_log.php吗?。name =梦思公司
但是我遇到了以下错误:
你的SQL语法有错误;查看与MySQL服务器版本对应的手册,以便在"WHERE shout LIKE 'Montz' ORDER BY 1 DESC' at line 1"附近使用正确的语法
一切都是为了返回这个名字发出的消息。
$ms = $row['shout'];
echo '<span style="color:blue;">'.$ms.'</span>';
我的查询有什么问题?
编辑:$name = "%".$_GET['name']."%";
$info = mysql_query("SELECT `1` as 'msgTime', `4` as 'shout' FROM log.shout_log WHERE 'shout' LIKE '$name'") or die(mysql_error());
echo '<table><tr><th>Data</th><th>Menssagem</th></tr>';
while($row = mysql_fetch_object($info)){
echo '<span style="color:blue;">'.htmlspecialchars($row->shout).'</span>';
}
echo '</table>';
您在查询中使用了列名别名,因此:
$ms = $row['4'];
应为
$ms = $row['shout'];
或
$ms = $row['msgTime'];
不管你在找什么,我甚至不知道,你的数字列命名策略是荒谬的
编辑
WHERE shout LIKE
:
WHERE `4` LIKE
EDIT2
好的,我必须这样做:
$query = "SELECT `1` as 'msgTime', `4` as 'shout' FROM log.shout_log WHERE 'shout' LIKE '$name'";
echo $query;
$info = mysql_query($query) or die(mysql_error());
正如评论中回答的那样,你有一个额外的'。
无论如何,我想指出你所做的是非常危险的,因为它很容易受到SQL注入攻击。
例如,如果我说我的名字是:
';drop table `shout_log`; --
那么它将杀死你的数据库表。
请参阅以下问题以获得避免SQL注入的正确代码。