sql >> Database >  >> RDS >> Mysql

Probleem met uploadgrootte in PHP en MySql

Uw sql-query overschrijdt waarschijnlijk de max_allowed_packet grootte, in welk geval de server de verbinding verbreekt.
Misschien ben je geïnteresseerd in
mysqli_stmt ::send_long_data waarmee je parameters langer dan max_allowed_packet in chunks kunt verzenden.

Update:"Hoe kan ik dit wijzigen? Is het gebruik van mysqli de enige optie?"
De waarde kan niet per sessie worden gewijzigd, d.w.z. als u de serverconfiguratie (my.cnf of opstartparameters) is de waarde alleen-lezen. edit:Zoals de opmerking suggereert, kun je de globale waarde van de mysql-server wijzigen nadat deze is gestart als je de juiste rechten .PDO/PDO_MYSQL (vanaf phpversie 5.3.0) lijkt niet om send_long_data te ondersteunen, maar daar ben ik ook niet zeker van. Dat zou mysqli achterlaten als de enige optie. Ik heb onlangs gemerkt dat Wez Furlong samengevoegde stapel overloop. Aangezien hij een van de auteurs van de PDO-implementatie is, weet hij misschien (hoewel hij de pdo_mysql niet heeft geschreven) module).

(Volledig niet getest en lelijk) voorbeeld

// $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. XAMPP - MySQL wordt onverwacht afgesloten

  2. Hoe eerst op nummer te sorteren met Oracle SQL-query?

  3. SQL-update top1 rijquery

  4. Wanneer MongoDB of andere documentgeoriënteerde databasesystemen gebruiken?