2013-06-20 55 views
2

我正在從mysql_轉換爲mysqli_並且仍然是新的mysqli_。這裏是我的代碼:mysqli_stmt_bind_param變量類型

$stmt = mysqli_prepare($con, "INSERT INTO test VALUES (?, ?)"); 
mysqli_stmt_bind_param($stmt, 'ss', $a, $b); 

$a=1; 
$b=1.5; 


mysqli_stmt_execute($stmt); 

我的問題是:

$a has Integer value 
$b float 

mysqli_stmt_bind_param ss (string,string)相應的變量類型。

結果是數據成功插入到表中,是按預期工作還是我做錯了?

+0

什麼是表字段類型 – DevZer0

+0

*旁註:*準備好的語句在MySQLi中不是必須的。準備好的語句比標準查詢慢。 – Raptor

+2

@ShivanRaptor:那麼你會怎麼建議呢?手動轉義並將值插入查詢中? – icktoofay

回答

0

實際上綁定函數(mysqli_stmt_bind_paramPDOStatement::bindParam)不是驗證函數。您只展示如何解釋您的價值以及您想從結果中獲得何種價值。

答案是:它按預期工作。

+0

所以標誌就像'我'=== intval()/(int)對嗎? –

+0

非常好,是的。只有當你有效地執行語句時,這種轉換纔會發生。 – Havenard

0

此語句目標表中的字段設置爲整數/浮點數嗎?或者他們是否在數據庫中設置爲字符串(有些人會這樣做,無論出於何種原因)。另外,對於準備好的語句比較慢,我相信只有在運行一次運行一次唯一查詢時纔是這種情況。如果您在循環中進行多個查詢,我相信,準備好的語句顯着更快(假設語句是在循環之外構建的)。

0

源變量確實可以是任何類型的,但在準備查詢時它會嘗試轉換爲字符串,因爲這就是您說查詢所採用的類型。

真正重要的是表中字段的類型。我不確定PHP如何處理這個問題,但如果查詢需要一個整數(i),並且您嘗試將其作爲字符串(s)準備,則可能會導致錯誤。無論如何,你應該指定正確的類型以避免問題。