簡體   English   中英

mysqli_stmt :: bind_param():類型定義字符串中的元素數量與綁定變量數量不匹配

[英]mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables warning

我用於防止SQL注入的代碼無法正常工作。 誰能幫我?

我收到此警告:警告:mysqli_stmt :: bind_param():類型定義字符串中的元素數量與綁定變量的數量不匹配。

謝謝。

$mysqli = new mysqli('localhost', 'root', '', 'Muproj');    
$query="INSERT INTO tblmember VALUES (':id', ':uname' , ':passwrd' , ':name' , ':surname' ,':0' )";
$stmt = $mysqli->prepare($query);
$stmt->bind_param(':id', $newid);
$stmt->bind_param(':uname', $C_uname);
$stmt->bind_param(':passwrd', $C_passwrd);
$stmt->bind_param(':name', $C_name);
$stmt->bind_param( ':surname', $C_surname);
$stmt->bind_param(':0', '0');
$stmt->execute();
$result=mysql_query($stmt);

您似乎在將PDO語法與MySQLi語法混合在一起。

請在http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers上閱讀

我本人並不太使用PDO,但是我確實使用MySQLi,因此您作為:something的引用是PDO聲明,但是您使用的SQL函數是MySQLi。

用庫MySQLi bind_param功能需要的所有數據,添加到一個數組狀行(它實際上可以是一個數組),但通過preceeded的類型的聲明作為S中特林, nteger,d ouble和B吊球。

我已經以MySQLi格式重寫了您的代碼:

$mysqli = new mysqli('localhost', 'root', '', 'Muproj');    
$query="INSERT INTO tblmember VALUES (?, ? , ? , ? , ? ,? )";
$stmt = $mysqli->prepare($query);
$stmt->bind_param("issssi", $newid, $C_uname, $C_passwrd, $C_name, $C_surname, $zero)
$stmt->execute();
//$result=mysqli_query($stmt);

您需要認真研究MySQLi和PDO在方法,格式和功能上的差異。 還應注意將所有MySQL都保持為MySQLi,例如, $result使用的是廢棄的MySQL查詢語句。

PS:為了清楚和向前兼容,我還建議您將SQL中的INSERT語句讀取為:

 INSERT INTO table_name (column_names1, column_name2, column_names3, ...) VALUES (?,?,?, ...)

因此,您和SQL可以清楚地看到哪些值插入了哪些列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM