可能重复:
PHP warning help?
我是php和mysql的新手我想我错放了mysqli_real_escape_string()我在第3行得到了以下警告。
警告:mysqli_real_escape_string()正好需要2个参数,1在
中给出这是php代码。
<?php
$page = mysqli_real_escape_string($_SERVER['SCRIPT_FILENAME']);
// Query member data from the database and ready it for display
$mysqli = new mysqli("localhost", "root", "", "sitename");
$dbc = mysqli_query($mysqli,"SELECT id page FROM mysql_counter_logs WHERE page = '$page'");
if (mysqli_num_rows($dbc) == 0) {
$mysqli = new mysqli("localhost", "root", "", "sitename");
$dbc = mysqli_query($mysqli,"INSERT INTO mysql_counter_logs (page) VALUES ('$page')");
}
if ($dbc == 1) {
$dbc = mysqli_query($mysqli,"UPDATE mysql_counter_logs SET hits = hits + 1 WHERE page = '$page'");
}
//Retreives the current count
$count = mysqli_fetch_row(mysqli_query($mysqli,"SELECT hits FROM mysql_counter_logs"));
if (!$dbc) {
// There was an error...do something about it here...
print mysqli_error();
}
//Displays the count on your site
print "$count[0]";
?>
还有一种方法可以使这段代码从XSS攻击中获得更多安全性证明。感谢
答案 0 :(得分:2)
您的代码示例有几处不正确。
首先mysqli_real_escape_string
需要在调用之前建立连接。其次,您需要将该连接传递给mysqli_real_escape_string
。
第三,你将mysqli api的对象版本与程序版本混合在一起。你需要选择一个并坚持下去。
如果您要使用对象版本,则需要执行以下操作:
$con = new mysqli(...);
$clean_data = $con->real_escape_string($your_string);
$con->query("SELECT ... FROM ... WHERE .. ='$clean_data'");
等等。
如果您要进入程序路线,则需要执行以下操作:
$con = mysqli_connect(...);
$clean_data = mysqli_real_escape_string($con, $your_string);
$result = mysqli_query($con, "SELECT ... FROM ... WHERE ... = '$clean_data');
答案 1 :(得分:0)
您正在创建一个实例,您应该使用$mysqli->real_escape_string
OO风格,而不是程序风格。
答案 2 :(得分:0)
第一个参数(如果您使用的是程序版本)是使用mysqli_connect()
创建的链接。 http://www.php.net/manual/en/mysqli.real-escape-string.php有一个面向对象和程序样式的例子。