Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么SQL/PHP中的查询不起作用?_Php_Mysql_Sql - Fatal编程技术网

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

为什么SQL/PHP中的查询不起作用?,php,mysql,sql,Php,Mysql,Sql,我用php进行了这个SQL查询。但是查询结果是错误的。如果删除此和first\u name(如“{$first\u name}%”%”,它将正常工作并生成正确的输出。我无法理解以下语法的错误。 任何帮助都将不胜感激。谢谢 $db = new PDO("mysql:dbname=newbie"); $first_name=$_GET["firstname"]; $first_name =$db->quote($first_name);

我用php进行了这个SQL查询。但是查询结果是错误的。如果删除此
和first\u name(如“{$first\u 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"); 

我认为这可能是因为您错过了
$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");

我认为这可能是因为您错过了
$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");

您没有正确使用PDO,并且将自己暴露在巨大风险中。使用占位符并转义数据:

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

有很多方法可以做到这一点,所有这些都在中介绍。

您没有正确使用PDO,并且将自己暴露在大规模风险中。使用占位符并转义数据:

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


有很多方法可以做到这一点,如中所述。

您可以删除“$first\u name”周围的“{”和“}”。当变量位于双引号内时,它们不应该是必需的。

您可以删除“$first\u name”周围的“{”和“}”。当变量包含在双引号内时,不需要使用它们。

请编辑您的初始段落。现在不清楚了。在谷歌上搜索SQL注入。这将有助于你的职业发展。你不需要一个用户来连接你的计划吗$db=newpdo('mysql:host=xxx;port=xxx;dbname=newbie','user','password');你并不总是需要它,但我已经把它从这里移走了,以免暴露出来!您是否在MySQL控制台或phpMyAdmin中尝试过查询?返回空集时,
$first\u name
$last\u name
设置为什么?请编辑您的初始段落。现在不清楚了。在谷歌上搜索SQL注入。这将有助于你的职业发展。你不需要一个用户来连接你的计划吗$db=newpdo('mysql:host=xxx;port=xxx;dbname=newbie','user','password');你并不总是需要它,但我已经把它从这里移走了,以免暴露出来!您是否在MySQL控制台或phpMyAdmin中尝试过查询?当它返回一个空集时,
$first\u name
$last\u name
的设置是什么?您完全错过了这有一个巨大SQL注入错误的部分。这不是一个引用问题。如果last_name没有什么好处,但我假设它应该是一个精确的搜索,因为他在第二个准则中使用了
LIKE
。你不需要在$lastname上加引号,因为它是一个变量。另外,当我删除像“{$first\u name}%”这样的名字时,它也能工作。@user1988876真的吗?所以,当你说它不产生任何东西-这是否意味着你得到0条记录作为回报?在这种情况下,我猜你没有任何符合条件的记录?你能从你的表
actors
中发布一些应该与查询匹配的示例数据吗?你完全错过了其中有一个巨大SQL注入错误的部分。这不是一个引用问题。如果last_name没有什么好处,但我假设它应该是一个精确的搜索,因为他在第二个准则中使用了
LIKE
。你不需要在$lastname上加引号,因为它是一个变量。另外,当我删除像“{$first\u name}%”这样的名字时,它也能工作。@user1988876真的吗?所以,当你说它不产生任何东西-这是否意味着你得到0条记录作为回报?在这种情况下,我猜你没有任何符合条件的记录?你能从表
actors
中发布一些与查询匹配的示例数据吗?我知道有这个注入错误,但我正在尝试在解决这些错误之前完成查询工作。正如我所提到的,当我删除像“{$first\u name}%”这样的first\u name时,查询就会工作。所以它必须与语法有关。如果你修复了错误,你就不会有那么多问题。查询字符串中缺少引号表示您做错了。让它“工作”注入错误是一个伟大的方式来创建大量的安全漏洞,因为你可能会忘记这一点,以后无法修复它。对逃跑抱着漫不经心的态度就像医生对手术前洗手抱着漫不经心的态度一样。第一次正确地写下它,你就不必回头再修改它了。这实际上是多了一行代码。你为什么抗议?@tadman-脆弱性不是一个bug,尽管它可能比bug更危险。“好心的话,你在这里就离题了。”塔德曼,对不起,我不是在抗议。我正在学习SQL,因此我想在着手解决安全漏洞之前了解如何进行适当的查询。正如我在问题中提到的,使用类似“{$first_name}%”的first_name会产生错误,删除它会得到正确的输出。所以我认为这里有问题。@PM77-1不正确的引用是一个错误,内联任意用户数据是一个更严重的错误。这个问题是关于编写适当的SQL查询的。其中一个非常重要的部分是确保没有SQL注入错误。PHP社区对这些问题似乎异乎寻常地漠不关心,对任何认为这些问题很重要的建议都表现出莫名其妙的近乎敌意。其他任何语言都不是这样,我知道存在注入错误,但我正在尝试在解决这些错误之前完成查询工作。正如我所提到的,当我删除像“{$first\u name}%”这样的first\u name时,查询就会工作。所以它必须与语法有关。如果你修复了错误,你就不会有那么多问题。查询字符串中缺少引号表示您做错了。让它“工作”注入错误是一个伟大的方式来创建大量的安全漏洞,因为你可能会忘记这一点,以后无法修复它。对逃跑抱着漫不经心的态度就像医生对手术前洗手抱着漫不经心的态度一样。第一次正确地写下它,你就不必回头再修改它了。这实际上是多了一行代码。你为什么要抗议?@tadman-脆弱是n