php用了mysqli_escape_string()函数后变量丢失(无法往后传了)

原创 2018年04月16日 17:14:11

这个小问题困扰了一个周末啊,不过后来还是解决了。

先上代码

<?php
error_reporting(0);
 function query_db($qstring) {
    include('db_login.php');  //connection details
    require_once('DB.php');  //PEAR DB
    $connection = DB::connect("mysqli://$db_username:$db_password@$db_host/$db_database");

    if (DB::isError($connection)){  //check for connect errors
        die ("Could not connect to the database: <br />". DB::errorMessage($connection));
    }
    mysqli_query($connection , "set names utf8");
    if (get_magic_quotes_gpc()) {  //guard against SQL injection
        $qstring = stripslashes($qstring);
    }
    //$qstring = mysqli_escape_string($connection,$qstring);
    /*$query = "SELECT title, pages, author_id, author FROM books NATURAL JOIN authors
               WHERE books.title LIKE '%".$qstring."%'";  //build the query*/
    //echo $qstring;
    $query = 'SELECT title, pages, author_id, author FROM `books` NATURAL JOIN `authors`
               WHERE `books`.`title` LIKE "%'.$qstring.'%"';
    //echo $query;
    $result = $connection->query($query);
    if (DB::isError($result)){
        die("Could not query the database:<br />".$query." ".DB::errorMessage($result));
    }
    echo ('<table border="1">');
    echo "<tr><th>Title</th><th>Author</th><th>Pages</th></tr>";
    if ($result == NULL) {
    	echo "error!";
    }
    while ($result_row = $result->fetchRow()) {
        echo "<tr><td>";
        echo $result_row[0] . '</td><td>';
        echo $result_row[3] . '</td><td>';
        echo $result_row[1] . '</td></tr>';
    }
    echo ("</table>");
    $connection->disconnect();
}
?>
<html>
<head>
    <title>Building a Form</title>
</head>
<body>
<?php
$search = htmlentities($_GET["search"]);
$self = htmlentities($_SERVER['PHP_SELF']);
if ($search != NULL){
    echo "The search string is: <strong>$search</strong>.";
    query_db($search);
}
else {
    echo ('
    <form action="'.$self.'" method="get">
        <label>Search:
            <input type="text" name="search"/>
        </label>
        <input type="submit" value="Go!" />
    </form>
    ');
}

?>
</body>
</html>

这个小脚本是实现查询数据库中的books.title中包含$qstring变量的数据并输出(是《学习PHP和MySQL》书上的)。

初次运行后发现无论输入什么都会出现所有的结果,后来把$query echo出来后发现$qstring已经消失了

如图:


之后把单双引号互换之后LIKE 后面有$qstring了,

欣喜的继续尝试查询,结果却没有结果了,

接着又尝试echo $qstring,然后发现echo后什么都没显示,说明$qstring 根本就没往后传,

继续往前查错,直到把函数mysqli_escape_string()注释了才正常了,

如图:



至此,问题算是解决了,但是没有mysqli_escape_string()函数又会有安全隐患,目前还不知道怎么解决。


php中mysqli_real_escape_string()函数

php连接mysql数据库后,在对数据库进行查询或插入操作时,为了防止恶意访问,通常对输入的字符串进行转义。 前一章介绍了mysql与mysqli的区别,如果采用mysql库连接数据库,转义函数有两...
  • sdhyfxh
  • sdhyfxh
  • 2015年05月08日 11:03
  • 5979

PHP函数体外的变量无法传入内函数使用原因

PHP函数体外的变量无法传入内函数使用原因 $param = 1; function fun() { echo $param; } Xdebug:Und...
  • u011598153
  • u011598153
  • 2016年08月05日 16:11
  • 480

PHP使用数字作为SESSION的Key一刷新页面,Session就消失了

首先我想要实现的效果是通过SESSION变量限制并统计文章的浏览量,具体想法:每个文章都有一个ID号,进入文章页面通过SESSION,为该变量建立对应的SESSION值,例:ID为9号的文章,$_SE...
  • zpf_nevergiveup
  • zpf_nevergiveup
  • 2016年12月12日 18:01
  • 1506

PHP json_decode 精度丢失问题!

PHP json_decode 精度丢失问题!今天在群里面,有人说php在很长的数字丢失问题如下面json串...
  • yoloyy
  • yoloyy
  • 2017年09月07日 21:25
  • 665

iis7中session丢失的解决方法

问题描述: Windows Server 2008 +IIS +ASP.net +SQLServer2008搭建的内部WEB系统。 用户Session总是丢失,可能是IIS的不稳定性将导致Sess...
  • u011529422
  • u011529422
  • 2013年10月05日 09:35
  • 1801

PHP的SESSION跨页面传递丢失的问题

PHP的SESSION跨页面传递丢失的问题近来有网友问我PHP的SESSION跨页面传递丢失的问题。在这里总结一下PHP的SESSION跨页面传递问题的解决方案。注意我们下面涉及到的配置均位于PHP....
  • samxx8
  • samxx8
  • 2011年07月01日 10:14
  • 1874

PHP mysqli_real_escape_string()函数--转义 SQL 语句中的特殊字符

为了防止SQL注入,我们会把用户提交的数据进行转义过滤。 在php5.4之前的版本中,有一个magic_quotes_gpc配置项,当magic_quotes打开时,所有'(单引号)“(双引号)...
  • m_zhurunfeng
  • m_zhurunfeng
  • 2017年12月22日 16:55
  • 387

php变量与函数

学新的语言; 今天打算从两个切入点:变量和函数去先入门。php的变量用美元符号开头,比如$value = 0 就声明了一个值是0的变量,它的声明方式和JavaScript类似,不需要写类型。php的...
  • Clifnich
  • Clifnich
  • 2016年12月17日 13:43
  • 930

php页面跳转session cookie丢失,不能登录等问题解决方法

thinkphp开发的一个项目,登录成功后又跳转到登录页面,在提交信息后输出session都是正常的,没有问题,但是页面跳转后,session出现丢失现象,无法正常完成登陆。通过查找资料,发现原来是b...
  • ws753191675
  • ws753191675
  • 2016年12月12日 16:32
  • 1028

PHP 数据中的反斜杠插入数据库后消失了

原因就是: 反斜杠(\ )需要进行转义。列入:INSERT INTO `stu` VALUES('lisi', 'school\class\stu_num', '188/900');这样直...
  • xiaoxiaohui520134
  • xiaoxiaohui520134
  • 2016年09月06日 18:29
  • 525
收藏助手
不良信息举报
您举报文章:php用了mysqli_escape_string()函数后变量丢失(无法往后传了)
举报原因:
原因补充:

(最多只允许输入30个字)