2013-03-21 59 views
0

我不得不更新我的PHP的新格式,但我与在线给出的代码混淆。目前我使用普通的mysql,但我想将其更新为mysqli。这里是我有一个代码peice的示例:Mysqli转换建议

$checked= mysql_real_escape_string($_REQUEST["checked"]); 

我认为这可能只是改变它的mysqli_real_escape_string的情况,但在看几个例子的代码后,我发现,这并不是唯一的解决方案 - mysqli :: real_eacape和mysqli-> real_escape也列出。哪一个是正确的?

谢谢

+1

中完全删除它,并用准备好的语句是正确的解。 – jeroen 2013-03-21 18:08:44

回答

-1

正确的是程序性的风格

mysqli_real_escape_string 

和OOP风格

$mysqli->real_escape_string() 

其中$ mysqli的仅仅是一个随机变量名称

+0

谢谢 - 只是真正学习PHP之后感觉就像我几乎不得不重新开始 – user2184018 2013-03-21 18:22:40

+1

最好的是BIT CHEETAH博客说,使用PDO而不是mysqli。 PDO是切割时代。 – Nikitas 2013-03-21 18:25:32

2

看一看这个http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

预处理语句是消毒数据库查询的正确方法,以及它在mysqli的首选方法。

为了回答您的意见,我的帖子:

注意到有调用它的方法有两种:面向对象和程序。

OOP使用意味着首先创建的mysqli对象是这样的:

$mysqli = new mysqli("localhost", "my_user", "my_password", "db"); 

,然后调用逃逸功能是这样的:

$mysqli->real_escape_string($unchecked_string); 

程序方式是通过第一连接完成到这样的数据库:

$link = mysqli_connect("localhost", "my_user", "my_password", "db"); 

,然后调用这样的逃生功能:

mysqli_real_escape_string($link, $unchecked_string); 

使用OOP和准备好的语句与库MySQLi工作的首选方式。

+0

谢谢,但是如果我不想使用预准备语句,mysqli_real_escape_string是否可以接受? – user2184018 2013-03-21 18:15:29

+0

不完全。 Mysqli_real_escape_string实际上并不能完美地清理你的查询,并且它仍然让你面对SQL注入攻击。在这里找到了一个很好的解释:http:// stackoverflow。com/questions/5414731/are-mysql-real-escape-string-and-mysql-escape-string-sufficient-for-app-secu 因此,您应该使用mysqli或PDO中的预准备语句作为转义查询对自己来说是毫无意义的。 – TonyArra 2013-03-21 18:35:04

+0

那么我想要做的是逃避之前工作的请求,但现在我得到一个警告“警告:mysqli_escape_string()期待恰好2个参数,1给出在C:”$ username = mysqli_real_escape_string($ _REQUEST [ “用户名”]); – user2184018 2013-03-21 18:46:03

0

我宁愿PDO来的mysqli和准备的语句自动跳脱字符串:在DB_NAME,DB_USER_NAME和DB_USER_PASS只需填写您的网络连接的凭据:

$con = new PDO('mysql:host=localhost;dbname=DB_NAME;charset=UTF-8', 'DB_USER_NAME', 'DB_USER_PASS'); 

$query = $con->prepare("SELECT `field` FROM `tbl_name` WHERE `field` = ?"); 
$query->bindValue(1, $field_value); 
$query->execute(); 

if($query->rowCount() > 0) { # If rows are found for query 
    echo "Field value found!"; 
} 
else { 
    echo "Field value not found!"; 
} 

准备和bindValue方法自动处理转义数据。