2013-03-19 3 views
1

Может кто-нибудь указать, где я ошибся.Обновление в mysqli error

Я попытался следовать рекомендациям, приведенным в - как-выполнить-update-with-mysqli-prepare? на сайте, но мне не повезло.

Следующая:

<?php 

//connection 
$con = new mysqli ("localhost","user","password","db"); 

$playno = "22"; 
$n1 = "4"; 
$n2 = "4"; 
$n3 = "4"; 

$stmt = $con -> prepare("UPDATE game SET no1 = ?, no2 = ?, no3 = ? WHERE id = ?"); 

$stmt -> bind_param ('iiii',"$n1","$n2","$n3","$playno"); 
$stmt -> execute(); 


?> 

дает в браузере:

Fatal error: Cannot pass parameter 2 by reference in C:\xampp\htdocs... on line 13

Большое спасибо заранее.

ответ

2
$stmt -> bind_param ('iiii',$n1,$n2,$n3,$playno); 
+0

Большое спасибо! – user2184481

0

Ошибка означает, что 2-й аргумент в bind_param как ожидается, будет ссылка на переменную.

$stmt -> bind_param ('iiii',"$n1","$n2","$n3","$playno"); 

От this:

Note that mysqli_stmt_bind_param() requires parameters to be passed by reference

Это должно быть: $stmt -> bind_param ('iiii',$n1,$n2,$n3,$playno);

0

При попытке передать Params следующим

$stmt -> bind_param ('iiii',"$n1","$n2","$n3","$playno"); 

"$n1" и т.д. рассматриваются как постоянные и, следовательно, приводит к ошибка (и не предупреждение).

Кроме того, вам необходимо передать интегральные значения, а не строки.

$stmt -> bind_param('iiii',$n1, $n2, $n3, $playno); 
0
$stmt -> bind_param ('iiii',"$n1","$n2","$n3","$playno"); 

должен быть

$stmt -> bind_param ('ssss',$n1,$n2,$n3,$playno); 

или

$playno = 22; 
$n1 = 4; 
$n2 = 4; 
$n3 = 4; 

$stmt -> bind_param ('iiii',$n1,$n2,$n3,$playno); 
-1

Ваша проблема это просто:

Это строка $ playno = "22"; // строка $ n1 = "4"; // строка $ n2 = "4"; // строка $ n3 = "4"; // строка

$stmt = $con -> prepare("UPDATE game SET no1 = ?, no2 = ?, no3 = ? WHERE id = ?"); 

Здесь ваша ошибка $ STMT -> bind_param ('IIII', "$ n1", "$ n2", "$ n3", "$ playno"); // fail, вы должны использовать s $ stmt -> bind_param ('ssss', $ n1, $ n2, $ n3, $ playno); // это правильно

или изменение:

$playno = 22; //integer 
$n1 = 4; //integer 
$n2 = 4; //integer 
$n3 = 4; //integer 
$stmt -> bind_param ('iiii',$n1,$n2,$n3,$playno); //this is correct 

, а затем:

$stmt -> execute();