2013-10-25 115 views
0

我是一個新的PHP,我有一個問題。插入。 while循環,mysql

$result = mssql_query('stored proc. with some parameters'); 

    while ($row = mssql_fetch_row($result)){ 
      mysqli_query('INSERT INTO dbname VALUES ($row[0], $row[1], ... , $row[15]);') or die ('Insertion mistake.'); 
    } 

問題是,〜430插入後我有die()異常。 $ result查詢的大小可以達到100.000個結果。我無法訪問MS基礎和觸摸存儲過程,並且這種數據傳輸是需要的。有人可以幫我解決問題,還是展示地點,我可以閱讀更多關於這種問題的內容?

+0

您是通過PHP-cli還是從網頁內的命令行運行PHP腳本?我懷疑你正在進入30秒超時。嘗試從命令行運行你的腳本,爲'php -c myscript.php' – ErnestV

+0

請使用列列表。 – Kermit

回答

0

創建單個查詢可能會更快。

$result = mssql_query('stored proc. with some parameters'); 
    $query = ''; 
    while ($row = mssql_fetch_row($result)){ 
     $query .= "INSERT INTO dbname VALUES ($row[0], $row[1], ... , $row[15]),"; 
    } 

    mysqli_query($query) or die('Insertion mistake.'); 
0

礦石更好這一點,我想:

while ($row = mssql_fetch_row($result)){ 
    $values = "({$row[0]}, {$row[1]}, ... , {$row[15]})"; 
} 
$query = 'INSERT INTO dbname VALUES ' . implode(',', $values); 
mysqli_query($query) or die('Insertion mistake.'); 

而且我並沒有表現出來,但是你需要[0],等等......通過mysqli_real_escape_string()之前運行數據$行插入。

此外,在查詢中,如果是文本,則需要引用非數據列類型的數據:'{$ row [0]}'等。

+0

嚴格指定表中的行。並且mysqli_real_escape_string()在這裏沒有必要 - 所有的數據都是從存儲中獲取的,它以「正確的」格式存儲。 – Leneron

+0

如果它全是數字或文本不可能包含NUL(ASCII 0),\ n,\ r ,\,',「和Control-Z,那麼你可能就可以了。另外,」表格中的行是多麼明確的「是什麼意思,祝你好運。 – AbraCadaver

0

我認爲你的內存不足。您可以添加到腳本頂部:

ini_set('memory_limit','512M'); 

這將設置你的腳本爲512MB,最大內存限制。 您也可以嘗試更改memory_limitphp.ini