2009-10-18 4 views
0

Можно создать дубликат:
PHP warning help?Проблема с предупреждением PHP?

Я новичок в 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

Вы создаете экземпляр уже, вы должны использовать $mysqli->real_escape_string OO-стиль, а не процедурный стиль.

+0

Где я могу разместить это? – new

+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

+0

В чем разница между объектом и процедурной? – new

+0

Это не очень просто подвести итог в комментарии, поэтому я свяжу вас с учебником: http://devzone.zend.com/node/view/id/638 –

Смежные вопросы