आपकी sql क्वेरी संभवतः max_allowed_packetसे अधिक हो गई है। ए> आकार जिस स्थिति में सर्वर डिस्कनेक्ट हो जाएगा।
आपमें रुचि हो सकती है mysqli_stmt ::send_long_data
जो आपको विखंडू में max_allowed_packet से अधिक लंबे पैरामीटर भेजने की अनुमति देता है।
अपडेट करें:"मैं इसे कैसे बदल सकता हूं? क्या mysqli का उपयोग करना ही एकमात्र विकल्प है?" स्टार्टअप पैरामीटर) मान केवल-पढ़ने के लिए होगा। संपादित करें:जैसा कि टिप्पणी से पता चलता है कि यदि आपके पास उचित अनुमतियां .PDO/PDO_MYSQL (phpversion 5.3.0 के अनुसार) लगता है नहीं है send_long_data का समर्थन करने के लिए, लेकिन मैं इसके बारे में भी निश्चित नहीं हूं। यह mysqli छोड़ देगा एकमात्र विकल्प के रूप में। मैंने हाल ही में देखा है कि Wez Furlong स्टैक ओवरफ्लो में शामिल हो गए। चूंकि वह पीडीओ कार्यान्वयन के लेखकों में से एक है, वह शायद जानता है (हालांकि उसने 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();