搜索某个字符串时出现了小问题


Little issue with search for a certain string

我正在尝试搜索包含特定字符串的行。为此,我使用以下查询:

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注入的正确代码。