0

我不得不为新格式更新我的 PHP,但我对在线给出的代码感到困惑。目前我使用的是普通的 mysql,但我想将其更新为 mysqli。这是我拥有的一段代码的示例:

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

我认为这可能只是将其更改为 mysqli_real_escape_string 的情况,但在查看了一些示例代码后,我发现这不是唯一的解决方案 - mysqli::real_eacape 和 mysqli->real_escape 也列出了。哪一个是正确的?

谢谢你

4

3 回答 3

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 的首选方式。

于 2013-03-21T18:11:25.593 回答
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!";
}

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

于 2013-03-21T18:12:39.567 回答
-1

正确的是程序风格

mysqli_real_escape_string

对于 OOP 风格

 $mysqli->real_escape_string()

其中 $mysqli 只是一个随机变量名

于 2013-03-21T18:19:44.213 回答