2013-08-27 43 views
0

考慮下面的代碼片段:在插入數據庫之前進行類型轉換?

$day = '3'; // form input 

... 

$stmt = $conn->stmt_init(); 
$q = 'INSERT INTO recording (release_day) VALUES(?)'; 
$stmt->prepare($q); 
$stmt->bind_param('i', $day); 
$stmt->execute(); 
... 

變量$日是從表單輸入一個字符串,但我將它綁定到一個整數。數據庫列是一個smallint數據類型。

我假設數據庫得到一個整數,對不對? 我是否需要在綁定之前進行某種類型的投射? 什麼被認爲是一種好的做法?

回答

1

我需要做綁定前的某種類型鑄造?

你已經在做類型轉換這裏:

$stmt->bind_param('i', $day); 

這脅迫$day成一個整數,因爲第一個參數值'i',然後通過該值到數據庫中。

例如,如果您的變量爲'123hello',則只會傳遞123

+0

謝謝!這就是我所需要知道的,如果bind_param覆蓋所有其他類型。它確實! – Marco

1
$i = 1; // PHP Casts to integer because the lack of quote marks for example. 
$i = "1"; // PHP Casts to string because of the quote marks 
$i = 1.39; // PHP Casts to float because of the decimal place 

這是當你已經創建的變量的數據自動施放,所以沒有必要爲您的變量二級演員,剛剛審查過MySQL手冊看到限制/的最大字節大小SMALLINT。確保你制定的服務器標準,你不會有問題http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html

+0

那麼,我插入什麼,一個字符串或整數? – Marco

+1

@Marco這是來自PHP解釋器,即鑄件。你的字符串將被轉換爲整型轉換類型,例如$ var =(int)「12」;當綁定一個整數。您的查詢會成功,不會出現錯誤,因爲您的變量可以強制轉換爲字符串 –

+1

,但$ day是字符串,它將作爲整數插入到您的語句中。 –

相關問題