2012-12-06 111 views
0

我有我想要插入到數據庫中的大型SQL文件。它不會通過phpMyAdmin的工作,因爲它是如此之大,所以我創建了一個自定義腳本:PHP/MySQL查詢:行沒有被插入

<?php 

ini_set('max_execution_time', 0); 

$file = file_get_contents('./mySQLfile.sql'); 

//var_dump($file); die(); 

$conn = new mysqli('localhost', 'myUserName', 'myPassword', 'myDatabase'); 

$q = $file; 

if ($result = $conn->query($q)) 
{ 
    echo '<font color="red">'.$conn->error.'</font>'; 
    echo '<br />'; 
} 

?> 

文件的var_dump()的正確。與數據庫的連接被創建(我通過從數據庫返回值來測試它)。但是,當我運行代碼時,沒有數據被插入到數據庫中。 SQL文件的開始如下:

-- phpMyAdmin SQL Dump 
-- version 3.4.5 
-- http://www.phpmyadmin.net 
-- 
-- Host: localhost 
-- Generation Time: Dec 05, 2012 at 04:01 PM 
-- Server version: 5.5.16 
-- PHP Version: 5.3.8 

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; 
SET time_zone = "+00:00"; 


/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */; 
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */; 
/*!40101 SET @[email protected]@COLLATION_CONNECTION */; 
/*!40101 SET NAMES utf8 */; 

-- 
-- Database: `myDatabase` 
-- 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `content_field_image_cache` 
-- 

CREATE TABLE IF NOT EXISTS `content_field_image_cache` (
    `vid` int(10) unsigned NOT NULL DEFAULT '0', 
    `nid` int(10) unsigned NOT NULL DEFAULT '0', 
    `delta` int(10) unsigned NOT NULL DEFAULT '0', 
    `field_image_cache_fid` int(11) DEFAULT NULL, 
    `field_image_cache_list` tinyint(4) DEFAULT NULL, 
    `field_image_cache_data` text, 
    PRIMARY KEY (`vid`,`delta`), 
    KEY `nid` (`nid`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

-- 
-- Dumping data for table `content_field_image_cache` 
-- 

INSERT INTO `content_field_image_cache` (`vid`, `nid`, `delta`, `field_image_cache_fid`, `field_image_cache_list`, `field_image_cache_data`) VALUES 
(1000, 1000, 0, 1000, 1, NULL), 
(1001, 1001, 0, 1001, 1, NULL), 
(1002, 1002, 0, 1002, 1, NULL), 

爲什麼不插入這些值?

謝謝。

+0

什麼是SQL文件的確切大小? –

+0

改爲運行未緩衝的查詢。由於報表'DELETE','INSERT','UPDATE'沒有返回值 – Yang

回答

2

PHP的MySQL驅動程序(在MySQL/MySQLi/PDO)不允許在一個單一的通話作爲一種安全措施多個查詢。您無法將整個轉儲饋送到像這樣的單個查詢調用中。

你會更好,只是做一些像

exec("mysql -u xxx -p < dump.sql"); 

代替。

+0

我用Google搜索,但我不知道這裏的語法。你可以把它放在「myUsername」,「myPassword」,「myDatabase?」的背景下。另外,如果'exec'命令不可用,還有另外一種方法嗎? – user1477388

+0

'mysql --help'會顯示你的語法。 –

+0

謝謝,但我沒有命令行訪問,這是一個共享服務器。我可以在我的Web瀏覽器中通過PHP腳本使用幫助命令嗎?如果是這樣,怎麼樣? – user1477388