搜索某个字符串的问题很少

时间:2015-07-14 17:43:21

标签: php mysql

我试图搜索包含某个字符串的行。 为此,我使用以下查询:

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=Montz

但我遇到以下错误:

  

您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以获得在''附近使用的正确语法。在哪里喊着' Montz'订购1 DESC'在第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>'; 

2 个答案:

答案 0 :(得分:0)

如评论中所述,你有额外的'。

无论如何,我想指出你正在做的事情非常危险,因为它容易受到SQL注入攻击。

例如,如果我说我的名字是:

  ';drop table `shout_log`; --

然后它会杀死你的数据库表。

请参阅以下问题for proper code to avoid SQL injection

答案 1 :(得分:0)

您在查询中提供了列名别名,因此:

$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());