1

我有这个用 php 编写的 SQL 查询。但查询导致错误。如果删除它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"); 
4

3 回答 3

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");
于 2013-05-09T20:12:57.337 回答
0

您没有正确使用 PDO,并且使自己面临大量SQL 注入错误的风险。使用占位符并转义您的数据:

$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"]));

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

于 2013-05-09T20:22:06.447 回答
0

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

于 2013-05-09T20:38:55.117 回答