Mysql
 sql >> база данни >  >> RDS >> Mysql

Проблем с размера на качване в PHP и MySql

Вашата sql заявка вероятно надвишава max_allowed_packet размер, в който случай сървърът ще прекъсне връзката.
Може да се интересувате от mysqli_stmt ::send_long_data което ви позволява да изпращате параметри, по-дълги от max_allowed_packet на парчета.

Актуализация:"Как мога да го променя? Използването на mysqli е единствената опция?"
Afaik стойността не може да бъде променена на база на сесия, т.е. ако не можете да промените конфигурацията на сървъра (my.cnf или параметри за стартиране) стойността ще бъде само за четене. редактиране:Както подсказва коментарът, можете да промените глобалната стойност на mysql сървъра, след като е бил стартиран, ако имате правилните разрешения .PDO/PDO_MYSQL (от phpversion 5.3.0) не изглежда за да поддържа send_long_data, но и за това не съм сигурен. Това ще остави mysqli като единствен вариант. Наскоро забелязах, че Wez Furlong присъединено препълване на стека. Тъй като той е един от авторите на реализацията на PDO, той може би знае (въпреки че не е написал pdo_mysql модул).

(Напълно непроверен и грозен) пример

// $mysqli = new mysqli(....
$fp = fopen($_FILES['binFile']['tmp_name'], 'rb') or die('!fopen');

//$result = $mysqli->query('SELECT @@max_allowed_packet') or die($mysqli->error);
//$chunkSize = $result->fetch_all();
//$chunkSize = $maxsize[0][0];
$chunkSize = 262144; // 256k chunks

$stmt = $mysqli->prepare('INSERT INTO foo (desc, bindata) VALUES (?,?)') or die($mysqli->error);
// silently truncate the description to 8k
$desc = 8192 < strlen($_POST['txtDescription']) ? $_POST['txtDescription'] : substr($_POST['txtDescription'], 0, 8192);
$stmt->bind_param('sb', $desc, null);

while(!feof($fp)) {
  $chunk = fread($fp, $chunkSize);
  $stmt->send_long_data(1, $chunk) or die('!send_long_data.'.$stmt->error);
}
$result = $stmt->execute();


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Генерирайте целочислена последователност в MySQL

  2. Как да обвържете datatable с времето за изпълнение на reportviewer

  3. Запитвания, свързани с производителността на Phalcon

  4. DB схема за чатове?

  5. Използване на Passport със Sequelize и MySQL