sql >> Databáze >  >> RDS >> Mysql

Problém s velikostí nahrávání v PHP a MySql

Váš dotaz SQL pravděpodobně překračuje max_allowed_packet velikost, v takovém případě se server odpojí.
Mohlo by vás zajímat mysqli_stmt ::send_long_data což umožňuje posílat parametry delší než max_allowed_packet v blocích.

Aktualizace:"Jak to mohu změnit? Je použití mysqli jedinou možností?"
Afaik hodnotu nelze změnit na základě jednotlivých relace, tj. pokud nemůžete změnit konfiguraci serveru (my.cnf nebo spouštěcí parametry) bude hodnota pouze pro čtení. edit:Jak naznačuje komentář, můžete změnit globální hodnotu serveru mysql po jeho spuštění, pokud máte příslušná oprávnění .PDO/PDO_MYSQL (od verze php 5.3.0) se nezdá na podporu send_long_data, ale ani tím si nejsem jistý. Zůstane tak mysqli jako jediná možnost. Nedávno jsem si všiml, že Wez Furlong spojené přetečení zásobníku. Protože je jedním z autorů implementace PDO, mohl by vědět (ačkoli nenapsal pdo_mysql modul).

(Zcela netestovaný a ošklivý) příklad

// $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. Mysql:přidání cizího klíče nedává varování/chybu v tabulkách MyISAM

  2. Uživatelský přístup k MySQL – specifické pro tabulku

  3. Kód chyby 1005, stav SQL HY000:Nelze vytvořit tabulku errno:150

  4. Co je schéma v SQL Server a jak vytvořit/zrušit schéma v SQL Server databázi - SQL Server / TSQL výukový program, část 27