2011-06-18 60 views
6

對於反饋形式,將轉儲用戶註釋到一個MySQL表,我不能確定爲用戶提供反饋的文本使用哪種類型bind_param(MySQL的字段類型=文本)PHP的mysqli bind_param類型文本

function sql_ins_feedback($dtcode,$custip,$name,$email,$subject,$feedback) 
{ 
    global $mysqli ; 
    if($stmt = $mysqli->prepare("INSERT INTO feedback (dtcode,custip,name,email,subject,feedback) VALUES (?,?,?,?,?,?)")) 
    { 
     $stmt->bind_param("ssssss", $dtcode,$custip,$name,$email,$subject,$feedback); 
     $stmt->execute() ; 
     $stmt->close() ; 
    } 
} 

或這?

 $stmt->bind_param("sssssb", $dtcode,$custip,$name,$email,$subject,$feedback); 

那麼,blob類型是文本字段的正確bind_param類型嗎?

bind_param(「s」)類型的大小限制是什麼?

使用bind_param(「b」)時還有什麼必須做的嗎?手冊(以及其他我在某處/某處閱讀的其他內容)表明blob類型的處理方式不同 - 我應該知道的任何內容?

謝謝

+0

數據庫中該字段的列類型是什麼? – hakre

回答

9

這實際上取決於Mysql服務器。整個查詢中組合的所有數據的默認最大大小爲1mb。請參閱:http://dev.mysql.com/doc/refman/5.1/en/packet-too-large.html

如果您的數據合併在"max_allowed_packet"閾值以下,只需使用「s」作爲任何文本字段的綁定類型即可。事實上,你通常可以使用「s」來取代任何字段類型(日期,浮點等)。

如果您想要插入的整個條目長度超過1mb(或重置它的任何內容),您需要使用mysqli_stmt::send_long_data方法和「b」綁定類型以塊形式發送此特定字段。

+0

這就是我正在尋找的信息。謝謝。 – user674073

0

對於那些想要使用mysqli的bind_param('ssbss', $data)你應該使用bind_param('sssss'),而你正在進行更新或插入。這樣你可以動態地取代所有?在與值準備好的查詢存儲在數組中:

call_user_func_array(array($stmt, 'bind_param'), makeValuesReferenced($typeValues)); 

$typeValues是使用由數組array_mergearray_unshift(「SSSSS」)和陣列(VAR1的參考,VAR2的參考,...)的陣列合併;

makeValuesReferenced:

/** 
* All prepared variables' references are needed by function bind_param 
* @param &$arr: array constituted of types and values 
*/ 
function makeValuesReferenced(&$arr){ 
    $refs = array(); 
    foreach($arr as $key => $value) { 
     // Param 1 of bind_param only needs value of types array 
     if($key === 0) { 
      $refs[$key] = $arr[$key]; 
     } else { 
      $refs[$key] = &$arr[$key];    
     } 
    } 
    return $refs; 
} 

使用bind_param( 'ssbss',$數據),你將只能得到在BLOB列空單元格。