PHP警告问题?

时间:2009-10-18 05:26:28

标签: php mysql

  

可能重复:
  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攻击中获得更多安全性证明。感谢

3 个答案:

答案 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');

http://php.net/mysqli

答案 1 :(得分:0)

您正在创建一个实例,您应该使用$mysqli->real_escape_string OO风格,而不是程序风格。

答案 2 :(得分:0)

第一个参数(如果您使用的是程序版本)是使用mysqli_connect()创建的链接。 http://www.php.net/manual/en/mysqli.real-escape-string.php有一个面向对象和程序样式的例子。