Mysqli转换建议
我不得不更新我的PHP的新格式,但我与在线给出的代码混淆。目前我使用普通的mysql,但我想将其更新为mysqli。这里是我有一个代码peice的示例:Mysqli转换建议
$checked= mysql_real_escape_string($_REQUEST["checked"]);
我认为这可能只是改变它的mysqli_real_escape_string的情况,但在看几个例子的代码后,我发现,这并不是唯一的解决方案 - mysqli :: real_eacape和mysqli-> real_escape也列出。哪一个是正确的?
谢谢
正确的是程序性的风格
mysqli_real_escape_string
和OOP风格
$mysqli->real_escape_string()
其中$ mysqli的仅仅是一个随机变量名称
谢谢 - 只是真正学习PHP之后感觉就像我几乎不得不重新开始 – user2184018 2013-03-21 18:22:40
最好的是BIT CHEETAH博客说,使用PDO而不是mysqli。 PDO是切割时代。 – Nikitas 2013-03-21 18:25:32
看一看这个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工作的首选方式。
谢谢,但是如果我不想使用预准备语句,mysqli_real_escape_string是否可以接受? – user2184018 2013-03-21 18:15:29
不完全。 Mysqli_real_escape_string实际上并不能完美地清理你的查询,并且它仍然让你面对SQL注入攻击。在这里找到了一个很好的解释:http:// *。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
那么我想要做的是逃避之前工作的请求,但现在我得到一个警告“警告:mysqli_escape_string()期待恰好2个参数,1给出在C:”$ username = mysqli_real_escape_string($ _REQUEST [ “用户名”]); – user2184018 2013-03-21 18:46:03
我宁愿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方法自动处理转义数据。
中完全删除它,并用准备好的语句是正确的解。 – jeroen 2013-03-21 18:08:44