Php 获取请求-无法从数据库执行SELECT语句

Php 获取请求-无法从数据库执行SELECT语句,php,mysql,Php,Mysql,我将通过GET请求向PHP代码发送请求。它将传递多个参数。我将在select语句的WHERE子句中使用这些参数 获取请求 http://localhost/server/person.php?Id=1&age=12&hight=100 PHP代码 <?php $connection = mysql_connect("localhost","user","pwd"); if (!$connection ) { die('FAIL: ' . mysql_error()); } my

我将通过
GET
请求向PHP代码发送请求。它将传递多个参数。我将在select语句的WHERE子句中使用这些参数

获取请求

http://localhost/server/person.php?Id=1&age=12&hight=100

PHP代码

<?php
$connection = mysql_connect("localhost","user","pwd");
if (!$connection )
  {
  die('FAIL: ' . mysql_error());
  }
mysql_select_db("db", $connection );
$result = mysql_query("SELECT * FROM Person where hieght='$_GET[hieght]");
$num_rows = mysql_num_rows($result);
?>

要从
$\u get
获取变量,请使用,例如从您可以编写的
$\u get
数组获取高度

$height=$_GET['height'];
$result = mysql_query("SELECT * FROM Person where hieght='".$hieght."'");
$result = mysql_query("SELECT * FROM Person where hieght='".$_GET['height']."'");
这样你就可以写作了

$height=$_GET['height'];
$result = mysql_query("SELECT * FROM Person where hieght='".$hieght."'");
$result = mysql_query("SELECT * FROM Person where hieght='".$_GET['height']."'");
或者你可以写

$height=$_GET['height'];
$result = mysql_query("SELECT * FROM Person where hieght='".$hieght."'");
$result = mysql_query("SELECT * FROM Person where hieght='".$_GET['height']."'");
更新:

使用
mysql\u real\u escape\u string
防止sql注入,如

$height=$_GET['height'];
$result = mysql_query("SELECT * FROM Person where hieght='".mysql_real_escape_string($hieght)."'");


要从
$\u get
中获取变量,请使用从
$\u get
数组获取高度的示例,您可以编写

$height=$_GET['height'];
$result = mysql_query("SELECT * FROM Person where hieght='".$hieght."'");
$result = mysql_query("SELECT * FROM Person where hieght='".$_GET['height']."'");
这样你就可以写作了

$height=$_GET['height'];
$result = mysql_query("SELECT * FROM Person where hieght='".$hieght."'");
$result = mysql_query("SELECT * FROM Person where hieght='".$_GET['height']."'");
或者你可以写

$height=$_GET['height'];
$result = mysql_query("SELECT * FROM Person where hieght='".$hieght."'");
$result = mysql_query("SELECT * FROM Person where hieght='".$_GET['height']."'");
更新:

使用
mysql\u real\u escape\u string
防止sql注入,如

$height=$_GET['height'];
$result = mysql_query("SELECT * FROM Person where hieght='".mysql_real_escape_string($hieght)."'");

用这个

$height = $_GET['hieght']; 
$result = mysql_query("SELECT * FROM Person where hieght='$height'");
而不是

$result = mysql_query("SELECT * FROM Person where hieght='$_GET[hieght]");
注意,这段代码很可能是sql的受害者 注射

用这个

$height = $_GET['hieght']; 
$result = mysql_query("SELECT * FROM Person where hieght='$height'");
而不是

$result = mysql_query("SELECT * FROM Person where hieght='$_GET[hieght]");
注意,这段代码很可能是sql的受害者 注射


您也可以使用此concat:

mysql_query("SELECT * FROM Person where hieght='".$_GET['hieght']."'");

您也可以使用此concat:

mysql_query("SELECT * FROM Person where hieght='".$_GET['hieght']."'");
当您感觉到自己的错误时,一种很好的调试技术是将SQL放入字符串中 您可以记录并查看它是否符合您的预期。 在查询后使用mysql_error()可能也给了您一个提示

$sql = "SELECT * FROM Person where hieght='".$_GET['hieght']."'";
$result = mysql_query($sql);
#Not for production code, but handy while learning - error goes into web server log.
error_log("SQL=$sql, error=".mysql_error());
当您感觉到自己的错误时,一种很好的调试技术是将SQL放入字符串中 您可以记录并查看它是否符合您的预期。 在查询后使用mysql_error()可能也给了您一个提示

$sql = "SELECT * FROM Person where hieght='".$_GET['hieght']."'";
$result = mysql_query($sql);
#Not for production code, but handy while learning - error goes into web server log.
error_log("SQL=$sql, error=".mysql_error());

您应该像分析注入的输入那样进行分析:

<?php

    $myHeight = mysql_reaL_escape_string($_GET['height']);

    $connection = mysql_connect("localhost","user","pwd");
    if (!$connection )
    {
        die('FAIL: ' . mysql_error());
    }
    mysql_select_db("db", $connection );
    $result = mysql_query("SELECT * FROM Person where height=$myHeight");
    $num_rows = mysql_num_rows($result);
?>


其次,您还应该使用对象,而不是旧的mysql_查询等。

您应该像解析注入一样解析输入:

<?php

    $myHeight = mysql_reaL_escape_string($_GET['height']);

    $connection = mysql_connect("localhost","user","pwd");
    if (!$connection )
    {
        die('FAIL: ' . mysql_error());
    }
    mysql_select_db("db", $connection );
    $result = mysql_query("SELECT * FROM Person where height=$myHeight");
    $num_rows = mysql_num_rows($result);
?>


其次,您还应该使用对象,而不是旧的mysql\u查询等。

'$\u GET[Hight]
似乎您缺少结束语
'
,应该是
'$\u GET[Hight]
,顺便说一句,这是非常容易发生SQL注入的,
需要一些时间来清理它,或者使用
PDO
。你比我快。还有,用“height”而不是“hight”,这可能是另一种打字错误。
“$\u GET[hight]
似乎你错过了结束语
,应该是
“$\u GET[hight]”
,顺便说一句,这很容易发生SQL注入,请花点时间清理一下,或者改用
PDO
。你比我先搞定了。还有,用“高度”而不是“高度”,这可能是另一个打字错误。我该如何纠正它,你能帮忙吗me@Illep,您收到了很多答案和评论,请阅读并执行。不是答案,我是问您的SQL注入评论made@Illep,很多地方都有人问过,也有人讨论过,请自己研究一下。应该有助于你理解它。我如何修复它,你能帮忙吗me@Illep,您收到了很多答案和评论,请阅读并执行。不是答案,我是问您的SQL注入评论made@Illep,很多地方都有人问过,也有人讨论过,请自己研究一下。应该是
$\u GET['hight']
不是
$\u GET[hight]
应该是
$\u GET['hight']
不是
$\u GET[hight]