問題描述
我正在嘗試創建一個小型 SQL 查詢類.
I'm trying to create a small SQL query class.
這是我的班級,但我不知道為什么,我有這個錯誤:嚴格的標準:在第 52 行中只應通過引用傳遞變量
Here is my Class but i don't why, I've this error : Strict Standards: Only variables should be passed by reference in line 52
第 52 行是:
if (!$stmt->bind_param($param[$i][0], mysqli_real_escape_string($this->mysqli, $param[$i][1]))) {
我的代碼(我開始了):
My code (i'm beginning) :
<?php
class Sql{
private $db;
private $user;
private $pwd;
private $url;
private $param;
private $mysqli;
function __construct($db, $user, $pwd, $url){
$this->db = $db;
$this->user = $user;
$this->pwd = $pwd;
$this->url = $url;
}
/**
* mysqli::connection()
*
* @return
*/
public function connection()
{
try{
$this->mysqli = new mysqli($this->db, $this->user, $this->pwd, $this->url);
}catch(Exception $e){
throw new Exception("Impossible de se connecter à la base " . $this->db);
}
}
public function select($query, $param, $debug=false){
$this->connection();
$r = $this->InitialiseResult("select");
if (!($stmt = $this->mysqli->prepare($query))) {
echo "Echec de la préparation : (" . $this->mysqli->errno . ") " . $this->mysqli->error;
}
//Param
for($i=0;$i<sizeof($param);$i++){
if (!$stmt->bind_param($param[$i][0], mysqli_real_escape_string($this->mysqli, $param[$i][1]))) {
echo "Echec lors du liage des paramètres : (" . $stmt->errno . ") " . $stmt->error;
}
}
if (!$stmt->execute()) {
echo "Echec lors de l'exécution : (" . $stmt->errno . ") " . $stmt->error;
}
if (!($res = $stmt->get_result())) {
echo "Echec lors de la récupération du jeu de résultats : (" . $stmt->errno . ") " . $stmt->error;
}else{
$r["state"] = true;
$r["rows"] = $res->fetch_assoc();
$r["num_rows"] = $res->num_rows;
if($debug)
var_dump($r);
}
return $r;
}
/**
* mysqli::InitialiseResult()
*
* @param mixed $p
* @return
*/
public function InitialiseResult($p)
{
$r = array(); //on écrase
$r["state"] = false;
switch($p){
case "select":
$r["rows"] = array();
$r["num_rows"] = 0;
break;
}
return $r;
}
}
?>
我嘗試將 $param 放在一個屬性中并使用它是 mysqli_real_escape_string() 但錯誤仍然存??在.
I've try to put $param in a property and use that is mysqli_real_escape_string() but the error is still there.
有什么想法嗎?
推薦答案
$stmt->bind_param()
要求所有的params都通過引用傳遞,所以不能傳遞函數的返回值直接(而不是先將其分配給變量).但是,正如評論中已經提到的,您根本不需要轉義參數,這是使用準備好的語句的優勢之一.
$stmt->bind_param()
requires all params to be passed by reference, so you can't pass function's return value directly (without assigning it to a variable first, that is). But, as was already mentioned in the comments, you don't need to escape the parameters at all, that's one of the advantages of using prepared statements.
這篇關于mysqli : 嚴格的標準:只應通過引用傳遞變量的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!