Dra*_*ake 10 php mysql database mysql-real-escape-string
我正在尝试对我的数据库应用程序(对于一个类)进行一些安全性和清理.开始时,我正在尝试使用mysql_real_escape_string,但每当我使用它时,它总是返回一个空字符串!
这是连接代码:
include_once ("./connect.php");
$db_connection = new mysqli($SERVER, $USERNAME, $PASSWORD, $DATABASE);
if (mysqli_connect_errno()) {
echo("Can't connect to MySQL Server. Error code: " . mysqli_connect_error());
return null;
}
$field = mysql_real_escape_string($_GET['value']);
$upc = $_GET['upc'];
$type = $_GET['field_type'];
echo $field;
echo $upc;
echo $type;
Run Code Online (Sandbox Code Playgroud)
当php实际执行时,$ upc和$ type被打印出来,但是没有$ field字段.香港专业教育学院尝试使用中间字符串,但我得到相同的结果.我真的很不知道这里出了什么问题.
此外,我已经完成了一个var_dump $field,它声称mysql_real_escape_string返回FALSE,这应该在没有连接(?)时发生,但有一个.
jer*_*oen 18
您正在使用mysqli而不是mysql进行连接,因此您需要 mysqli_real_escape_string
虽然你可以很容易地在mysqli中使用预处理语句然后你也不需要......
请参阅PHP文档http://php.net/manual/en/function.mysql-real-escape-string.php
MySQL连接.如果未指定链接标识符,则假定mysql_connect()打开的最后一个链接.如果没有找到这样的链接,它将尝试创建一个,就好像没有参数调用mysql_connect()一样.如果未找到或建立连接,则会生成E_WARNING级别错误.
这意味着您需要一个活动连接才能使用此功能
如果您没有看到任何错误,请尝试
error_reporting(E_ALL);
ini_set('display_errors','On');
Run Code Online (Sandbox Code Playgroud)
mysql_real_escape_string 替代
使用
$escaped = htmlspecialchars($_GET['value'], ENT_QUOTES, "ISO-8859-1");
Run Code Online (Sandbox Code Playgroud)
要么
$escaped = filter_var($_GET['value'], FILTER_SANITIZE_STRING);
Run Code Online (Sandbox Code Playgroud)
你得到任何空字符串,因为该函数有两个参数; 实际连接到数据库,然后是字符串.用这个:
$sanitizedField = mysqli_real_escape_string($connection, $field);
Run Code Online (Sandbox Code Playgroud)