Для формы обратной связи, которая будет удалять комментарии пользователей в таблице MySQL, я не знаю, какой тип bind_param использовать для предоставленного пользователем текста обратной связи (тип поля MySQL = текст)
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 рассматриваются по-разному – все, что я должен знать?
благодаря
Это фактически зависит от сервера Mysql. Максимальный размер по умолчанию для всех данных, объединенных во всем запросе, равен 1 Мб. См .: http://dev.mysql.com/doc/refman/5.1/en/packet-too-large.html
Если ваши данные объединены под этим порогом «max_allowed_packet» , просто используйте «s» для типа привязки для любого текстового поля. Infact, вы обычно можете уйти с использованием «s» для любого типа поля (date, float и т. Д.).
Если вся ваша запись, которую вы хотите вставить, превышает 1 мб (или все, что вы ее переустановили) в длину, вы захотите использовать метод mysqli_stmt :: send_long_data и тип привязки «b» для отправки этого конкретного поля в куски.
Тем, кто хочет использовать mysqli bind_param('ssbss', $data)
вы должны использовать bind_param('sssss')
, в то время как вы делаете UPDATE или INSERT. Таким образом, вы можете динамически заменить все? в подготовленном запросе со значениями, хранящимися в массиве:
call_user_func_array(array($stmt, 'bind_param'), makeValuesReferenced($typeValues));
$typeValues
– это массив, объединенный с использованием array_merge
или array_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', $ data), вы получите только пустую ячейку в столбце blob.