![](/img/trans.png)
[英]Warning : mysqli_stmt::bind_param(): Number of elements in type definition string doesn’t match number of bind variables
[英]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.