2011-06-18 15 views
6

dla postaci sprzężenia zwrotnego, który zrzuci komentarze użytkowników do tabeli MySQL, jestem pewien, jaki typ bind_param użyć do tekstu zwrotnego dostarczane przez użytkownika (MySQL typ pola = tekst)typu PHP mysqli bind_param tekstu

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() ; 
    } 
} 

CZY TO?

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

Tak, czy typ kropelki ma poprawny typ bind_param dla pola tekstowego?

Jaki jest limit rozmiaru dla typu bind_param ("s")?

Czy jest coś jeszcze, co należy zrobić przy użyciu bind_param ("b")? Podręcznik (i coś, co przeczytałem gdzieś/kiedyś) sugeruje, że typy kropel są traktowane inaczej - wszystko, co powinienem wiedzieć?

Dzięki

+0

Jaki jest typ kolumny w bazie danych dla tego pola? – hakre

Odpowiedz

9

To zależy od serwera MySQL. Domyślny maksymalny rozmiar dla wszystkich danych połączonych w całym zapytaniu to 1mb. Zobacz: http://dev.mysql.com/doc/refman/5.1/en/packet-too-large.html

Jeśli twoje dane połączone są poniżej progu "max_allowed_packet", po prostu użyj "s" dla typu powiązania dla dowolnego pola tekstowego. W rzeczywistości, zazwyczaj można uniknąć używania "s" dla dowolnego rodzaju pola (data, float itp.).

Jeśli cały wpis połączony, który chcesz wstawić, ma długość większą niż 1 MB (lub jakkolwiek go zresetował), musisz użyć metody mysqli_stmt::send_long_data i typu powiązania "b", aby wysłać to konkretne pole w porcjach .

+0

Oto informacje, których szukałem. Dzięki. – user674073

0

Dla tych, którzy chcą używać mysqli's bind_param('ssbss', $data), powinieneś użyć bind_param('sssss'), podczas gdy robisz UPDATE lub INSERT. W ten sposób możesz dynamicznie zastąpić wszystko? w przygotowaną hasła z wartościami przechowywanymi w tablicy:

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

$typeValues jest tablicą połączone za pomocą array_merge lub array_unshift przez tablicę („sssss”) oraz tablica (odniesienie var1, odniesienie 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; 
} 

Korzystanie bind_param ('ssbss', $ dane) będzie można dostać tylko pustą komórkę w kolumnie blob.

Powiązane problemy