为什么SQL / PHP中的这个查询不起作用?

时间:2013-05-09 20:08:23

标签: php mysql sql

我在php中进行了这个SQL查询。但查询结果出现在ERROR中。如果删除此AND first_name LIKE '{$first_name}%',它可以正常工作并产生正确的输出。我无法遵循以下语法的错误。 任何帮助将非常感激。感谢

$db = new PDO("mysql:dbname=newbie");
            $first_name=$_GET["firstname"];
            $first_name =$db->quote($first_name);
            $last_name=$_GET["lastname"];
            $last_name=$db->quote($last_name);
            $rows=$db->query("SELECT id,first_name FROM actors WHERE last_name=$last_name AND first_name LIKE '{$first_name}%' ORDER BY film_count DESC LIMIT 1"); 

3 个答案:

答案 0 :(得分:1)

我认为这可能是因为你错过了$lastname上的引号,因为它是一个文本字段。

$db = new PDO("mysql:dbname=newbie");
            $first_name=$_GET["firstname"];
            $first_name =$db->quote($first_name);
            $last_name=$_GET["lastname"];
            $last_name=$db->quote($last_name);
            $rows=$db->query("SELECT id,first_name FROM actors WHERE last_name='{$last_name}' AND first_name LIKE '{$first_name}%' ORDER BY film_count DESC LIMIT 1");

答案 1 :(得分:0)

您没有正确使用PDO,并且让您面临巨大的SQL injection bugs风险。使用占位符并转义数据:

$sth = $db->prepare("SELECT id,first_name FROM actors WHERE last_name=:lastname AND first_name LIKE :first_name ORDER BY film_count DESC LIMIT 1");
$result = $db->execute(array("firstname" => "%" . $_GET["firstname"] . "%", "lastname" => $_GET["lastname"]));

有很多方法可以做到这一点,所有这些都在various tutorials中进行了描述。

答案 2 :(得分:0)

您可以删除' {'和'}'周围' $ first_name'。当变量在双引号内时,它们不是必需的。