sql >> Database teknologi >  >> RDS >> Mysql

Problem med uploadstørrelse i PHP og MySql

Din sql-forespørgsel overstiger sandsynligvis max_allowed_packet a> størrelse, i hvilket tilfælde serveren afbrydes.
Du kan være interesseret i mysqli_stmt ::send_long_data som giver dig mulighed for at sende parametre længere end max_allowed_packet i bidder.

Opdatering:"Hvordan kan jeg ændre det? Er det den eneste mulighed at bruge mysqli?"
Afaik kan værdien ikke ændres på en per-session-base, dvs. hvis du ikke kan ændre serverkonfigurationen (my.cnf eller opstartsparametre) vil værdien være skrivebeskyttet. edit:Som kommentaren antyder, kan du ændre den globale værdi af mysql-serveren efter den er startet, hvis du har de korrekte tilladelser .PDO/PDO_MYSQL (fra phpversion 5.3.0) synes ikke for at understøtte send_long_data, men det er jeg heller ikke sikker på. Det ville efterlade mysqli som eneste mulighed. Jeg har for nylig bemærket, at Wez Furlong sammenføjet stak overløb. Da han er en af ​​forfatterne til PDO-implementeringen, kender han det måske (selvom han ikke skrev pdo_mysql modul).

(Fuldstændig uafprøvet og grimt) eksempel

// $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. kolonnerækkefølge i SELECT *-sætning - garanteret?

  2. Postgresql-opdatering med join

  3. Returner rækker, der indeholder ikke-alfanumeriske tegn i SQL Server

  4. Smukke blokke af kedelplade