我不得不为新格式更新我的PHP,但我对在线提供的代码感到困惑。目前我正在使用普通的mysql,但我想将其更新为mysqli。这是我有一个代码片段的例子:
$checked= mysql_real_escape_string($_REQUEST["checked"]);
我认为可能只是将mysqli_real_escape_string更改为一个案例,但在查看几个示例代码后,我发现这不是唯一的解决方案 - mysqli :: real_eacape和mysqli-> real_escape也会列出。哪一个是正确的?
谢谢
答案 0 :(得分: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的首选方法。
答案 1 :(得分: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方法自动处理转义数据。
答案 2 :(得分:-1)
正确的是程序风格
mysqli_real_escape_string
和OOP风格
$mysqli->real_escape_string()
其中$ mysqli只是一个随机变量名