天天看點

mysql bind variable_警告:mysqli_stmt_bind_param:類型定義字元串中的元素數與綁定變量數不比對[重複](Warning: mysqli_stmt_bind_pa...

警告:mysqli_stmt_bind_param:類型定義字元串中的元素數與綁定變量數不比對[重複](Warning: mysqli_stmt_bind_param: Number of elements in type definition string doesn't match number of bind variables [duplicate])

我收到的消息“

警告:mysqli_stmt_bind_param:類型定義字元串中的元素數與...中的綁定變量數不比對

在一個簡單的PHP選擇語句中

$wherePtest1 = "postcode= ? AND proptype = ? AND ";

$whereVtest1 = "$lc_postcode, $proptype";

$where_no_andP = rtrim($wherePtest1, 'AND ');

var_dump($where_no_andP);

var_dump($whereVtest1);

if ($stmt1 = mysqli_prepare($link, "SELECT $what_select4TS FROM $table WHERE $where_no_andP ORDER BY rent $reihenach LIMIT $offset, $rowsPerPage"))

{

mysqli_stmt_bind_param($stmt1, "ss", $whereVtest1);

etc

我收到此警告即使var_dump()正确顯示

string(29) "postcode= ? AND proptype = ?"

string(9) "da8, Flat"!

I am getting the message “

Warning: mysqli_stmt_bind_param: Number of elements in type definition string doesn't match number of bind variables in…

in a simple php select statement

$wherePtest1 = "postcode= ? AND proptype = ? AND ";

$whereVtest1 = "$lc_postcode, $proptype";

$where_no_andP = rtrim($wherePtest1, 'AND ');

var_dump($where_no_andP);

var_dump($whereVtest1);

if ($stmt1 = mysqli_prepare($link, "SELECT $what_select4TS FROM $table WHERE $where_no_andP ORDER BY rent $reihenach LIMIT $offset, $rowsPerPage"))

{

mysqli_stmt_bind_param($stmt1, "ss", $whereVtest1);

etc

I am getting this warning EVEN THOUGH var_dump() correctly show

string(29) "postcode= ? AND proptype = ?"

string(9) "da8, Flat"!

原文:https://stackoverflow.com/questions/39625230

2020-03-21 12:03

滿意答案

因為這:

mysqli_stmt_bind_param($stmt1, "ss", $whereVtest1);

^^

MySQLi 不會将您的CSV資料$whereVtest1并将其拆分。 您必須為每個占位符明确提供一個SINGLE值:

mysqli_stmt_bind_param($stmt1, 'ss....s', $val1, $val2, .... $valN);

^----------^

^------------------^

^------------------------^

Because this:

mysqli_stmt_bind_param($stmt1, "ss", $whereVtest1);

^^

MySQLi will NOT take your CSV data in $whereVtest1 and split it up for you. You have to EXPLICITLY provide a SINGLE value for EVERY placeholder you have:

mysqli_stmt_bind_param($stmt1, 'ss....s', $val1, $val2, .... $valN);

^----------^

^------------------^

^------------------------^

2016-09-22

相關問答

MySQLi::error和MySQLi::errno是RDBMS傳回給PHP的錯誤代碼和消息的容器, 而不是設定語句時PHP代碼中遇到的錯誤。 對bind_param()的錯誤調用bind_param()參數不足)顯然不會與RDBMS通信,是以不會從RDBMS接收錯誤。 根據文檔 , bind_param()在失敗時傳回一個布爾值FALSE 。 是以,您需要驗證它是否已成功調用。 $rs = $st->bind_param('is', $val);

if ($rs) {

$st->execu...

它使用C API,是以在這種情況下,SQL注入是沒有機會的。 It uses the C API, so in this case there is no chance for SQL injection.

$stmt->bind_param(''.$typeok.'',$paramok);

缺少你試圖插入的變量類型? 地方 $stmt->bind_param('ss', ''.$typeok.'', $paramok);

您可以在這裡閱讀使用數字,字元串等時應使用的字元: http://php.net/manual/en/mysqli-stmt.bind-param.php 類型 包含一個或多個字元的字元串,用于指定相應綁定變量的類型: $stmt->bind_param(''.$typeok....

$sql = 'INSERT INTO users (user_email, user_name, user_pref, user_password)

VALUES(?, ?, ?, des_encrypt(substring(md5(rand()),1,8)))';

僅定義3個占位符,但您嘗試寫入4個占位符。 $stmt->bind_param('ssss', $_POST['user_email'], $_POST['user_name'], $_POST['user_pref'...

我認為你的連接配接檔案mysqli_connect.php可能有問題 這是我的代碼供您參考 define("DB_HOST", "localhost");

define("DB_USERNAME", "username");

define("DB_PASSWORD", "password");

define("DB_NAME", "database name");

$dbc = mysqli_connect(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);

通...

其實你有0 ? s和2個參數。 的? 隻能在字元串之外工作。 mysqli_prepare将'%(?)%'為占位符,而不是字元串。 您需要将%添加到您要綁定的變量中...像這樣: $stmt = mysqli_prepare($link, "

select e.emp_id, e.first_name, e.last_name, e.hire_date, d.dept_name

from employee e, department d

where e.dept_id = ...

簡單的錯誤...呃。 我讨厭那個。 不是我的信用。 $bind = 'siiiiissssiss'; // No commas

Simple mistake... Ugh. I hate that. Not my credit. $bind = 'siiiiissssiss'; // No commas

問題是在選擇你選擇2列以上并且隻在mysqli_stmt_bind_result綁定2, mysqli_stmt_bind_result ,select中的列數必須與mysqli_stmt_bind_result的相同數量的變量mysqli_stmt_bind_result 要修複,改變 SELECT * from admins WHERE user_email=? AND user_pass=?

至: SELECT user_mail, user_pass from admins WHERE ...

$stmt = $mysqli->prepare('SELECT * FROM users WHERE lname = ? AND fname = ?');

$stmt->bind_param('ss', $param[0], $param[1]);

$stmt->execute();

//other version

$stmt = $mysqli->prepare('SELECT * FROM users WHERE lname = ? AND fname = ?');

$type = "ss...

因為這: mysqli_stmt_bind_param($stmt1, "ss", $whereVtest1);

^^

MySQLi 不會将您的CSV資料$whereVtest1并将其拆分。 您必須為每個占位符明确提供一個SINGLE值: mysqli_stmt_bind_param($stmt1, 'ss....s', $val1, $val2, .... $valN);

...

相關文章

Java Number類 一般地,當需要使用數字的時候,我們通常使用内置資料類型,如:byte、

...

寫like語句的時候 一般都會寫成 like '% %' 在mybatis裡面寫就是應該是

...

在編寫背景登陸子產品時,将許多預設的設定放在一個名為default的package 裡。然後再定義其他

...

Java String類 字元串廣泛應用在Java程式設計中,在Java中字元串屬于對象,Java提

...

指令格式: SET key value 把字元串值value存儲到key中。如果存在此key,SE

...

今天遇見一個問題.不知道怎麼解決. 如: 自己建立了一個檔案read.txt 裡面存放這樣的 鍵值

...

在使用jsp生成web圖檔時遇到這個問題,這是源代碼中的一條語句,源代碼可以執行,可是一将源碼放入ec

...

JDK之前,switch條件表達隻能是與整型相容的類型(char,byte,short,int,Cha

...

最新問答

如果啟用了複制處理程式,請確定将其置于其中一個安全角色之後。 我見過人們做的另一件事是在不同的端口上運作admin。 最好在需要auth的頁面上使用SSL,這樣你就不會發送明确的密碼,是以管理和複制将發生在8443上,而正常查詢将在8080上發生。 如果您要簽署自己的證書,請檢視此有用的SO頁面: 如何在特定連接配接上使用不同的證書? I didn't know that /admin was the context for SOLR admin because /admin does not re

第一:在您的樣本中,您有: 但是你在詢問 //td[@class=‘CarMiniProfile-TableHeader’] (注意TableHeader中的大寫'T')。 xpath區分大小寫。 第二:通過查詢// td [@ class ='CarMiniProfile-TableHeader'] / td,你暗示你在外部td中有一個'td'元素,而它們是兄弟姐妹。 有很多方法可以在這裡獲得制作和模型

這是你的答案: http://jsfiddle.net/gPsdk/40/ .preloader-container { position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px; background: #FFFFFF; z-index: 5; opacity: 1; -webkit-transition: all 500ms ease-out;

問題是,在啟用Outlook庫引用的情況下, olMailItem是一個保留常量,我認為當您将Dim olMailItem as Outlook.MailItem ,這不是問題,但是嘗試設定變量會導緻問題。 以下是完整的解釋: 您已将olMailItem聲明為對象變量。 在指派語句的右側,在将其值設定為對象的執行個體之前,您将引用此Object 。 這基本上是一個遞歸錯誤,因為你有對象試圖自己配置設定自己。 還有另一個潛在的錯誤,如果之前已經配置設定了olMailItem ,這個語句會引發另一個錯誤(可能是

我建議使用wireshark http://www.wireshark.org/通過記錄(“捕獲”)裝置可以看到的網絡流量副本來“監聽”網絡上發生的對話。 當您開始捕獲時,資料量似乎過大,但如果您能夠發現任何看起來像您的SOAP消息的片段(應該很容易發現),那麼您可以通過右鍵單擊并選擇來快速過濾到該對話'關注TCP Stream'。 然後,您可以在彈出視窗中檢視您編寫的SOAP服務與Silverlight用戶端之間的整個對話。 如果一切正常,請關閉彈出視窗。 作為一個額外的好處,wireshar

Android預設情況下不提供TextView的合理結果。 您可以使用以下庫并實作适當的aligntment。 https://github.com/navabi/JustifiedTextView Android Does not provide Justified aligntment of TextView By default. You can use following library and achieve proper aligntment. https://github.com/

你的代碼适合我: class apples { public static void main(String args[]) { System.out.println("Hello World!"); } } 我将它下載下傳到c:\ temp \ apples.java。 以下是我編譯和運作的方式: C:\temp>javac -cp . apples.java C:\temp>dir apples Volume in drive C is HP_PAV

12個十六進制數字(帶前導0x)表示48位。 那是256 TB的虛拟位址空間。 在AMD64上閱讀wiki(我假設你在上面,對嗎?)架構http://en.wikipedia.org/wiki/X86-64 12 hex digits (with leading 0x) mean 48 bits. That is 256 TB of virtual address space. Read wiki on AMD64 (I assume that you are on it, right?) ar

這将取決于你想要的。 對象有兩種屬性:類屬性和執行個體屬性。 類屬性 類屬性對于類的每個執行個體都是相同的對象。 class MyClass: class_attribute = [] 這裡已經為類定義了MyClass.class_attribute ,您可以使用它。 如果您建立MyClass執行個體,則每個執行個體都可以通路相同的class_attribute 。 執行個體屬性 instance屬性僅在建立執行個體時可用,并且對于類的每個執行個體都是唯一的。 您隻能在執行個體上使用它們。 在方法__init__中定