php mysql insert into 予期せず終了しました

WBOY
リリース: 2016-06-23 14:12:57
オリジナル
892 人が閲覧しました

$result = mysql_query("SELECT uid , pid , cate                       FROM upcm");while($rows = mysql_fetch_row($result)){$arry = explode($sepr,$rows[2],5);$query = "INSERT INTO upcn(uid,pid,cate1,cate2,cate3,cate4,cate5)           VALUES('$rows[0]','$rows[1]','$arry[0]','$arry[1]','$arry[2]','$arry[3]','$arry[4]')";$result1 = mysql_query($query);if(!$result1){echo "fail<br>";}}
ログイン後にコピー


mysql_fetch_row($result) はクエリの結果を取得し、それらを 1 つずつ処理し、処理後に新しいテーブルに書き込みます。 ただし、while ループが実行されるたびに、プログラムはデータが書き込まれる前に必ず終了します。処理され、データは処理されません。insert into は、挿入操作の代わりに printf ("**") に置き換えられます。プログラムは正しく実行され、挿入の数はプログラムが実行されるたびに変化します。


ディスカッションへの返信 (解決策)

PS: 処理されたデータは 190,000 個のデータであり、約11M。サーバーの負荷が高いため、サーバーで使用されているApacheが終了しますか?

。 。
あなたの問題のような問題の場合、信頼性を高めるには、単一の SQL ステートメントを cli モードで実行する必要があります。 ! !
最悪の場合、これを行うのではなく、最初にデータをエクスポートしてからインポートする必要があります
select into を参照してください

バッチ/回で処理されると言えます

詳細な説明については、以下のステートメントを参照してください...

#2F は、ファイルを挿入してから読み取ったと言いました。試してみましたが、1K のエントリを挿入すると、明確な理由もなく終了します。

処理能力(約1,000件)を見て、一括処理(3階で説明した方法)したい場合、何回行うことになりますか? 200,000件のレコードがあります。 。

単一の挿入として書くことはできませんか? もちろん 1k の挿入は mysql を引きずります


単一の挿入で複数のデータを挿入しても大丈夫ですか?

はありますか?解決する必要がある問題がいくつかあります:

1. PHP タイムアウト

2. Web サーバーのタイムアウト

3. 特殊文字はエスケープされません
4. count($array)
アルゴリズムは次のとおりです。 1,000 回ごとの INSERT ステートメントを複数の VALUE に組み立てる
ページング モードでセグメントごとに挿入する

php を介して手を変更することなく、SQL コマンドを直接使用して完了する
$sql =<<< SQL
INSERT INTO upcn(uid,pid,cate1) ,cate2,cate3,cate4,cate5)
SELECT uid , pid
, substring_index(substring_index(cate,'$sepr',1),'$sepr',-1)
, substring_index(substring_index(cate,'$sepr' ,2),'$sepr', -1)
, substring_index(substring_index(cate,'$sepr',3),'$sepr',-1)
, substring_index(substring_index(cate,'$sepr',4) ),'$sepr',-1 )
, substring_index(substring_index(cate,'$sepr',5),'$sepr',-1)
FROM upcm
SQL


のように書けませんか? 1k の挿入は当然 mysql をドラッグします ああ
1 回の挿入で ..values(),(),() を挿入できますか?

ストアド プロシージャを使ってみた方が良いでしょうか?

ストアド プロシージャとはどういう意味ですか?まだ勉強していません。

対処する必要がある問題がいくつかあります。
1. PHP タイムアウト

2. Web サーバーのタイムアウト

3. 特殊文字はエスケープされません
4. count($array)

アルゴリズム的に次のことを考慮します。複数の VALUE にまとめられた INSERT ステートメントが 1,000 回ごとに挿入されます
ページング方式でセグメントごとに挿入します

php を介して手を変えることなく、SQL 命令を直接使用して完了します
$sql =<<< SQL
INSERT INTO upcn(uid, pid , cate1, cate2, cate3, c...
これはマスターです! この方法は非常に効果的で、9.15 秒で完了しました。

対処する必要がある問題がいくつかあります。
1. PHP タイムアウト
2. Web サーバーのタイムアウト
3. 特殊文字はエスケープされません
4. count($array)
アルゴリズム的に次のように考慮します。複数の VALUE INSERT ステートメントを組み立てて挿入します
ページング方式でセグメントごとに挿入します

SQL 命令を直接使用して、php を通じて手を変更することなく完了します
$sql =<<< SQL
INSERT INTO upcn(uid ,pid, cate1,cate2,cate3,cate4,cate5)
、SELECT uid 、pid
、substring_index(substring_index(cate,'$sepr',1),'$sepr',-1)
、substring_index(substring_index(cate) ,'$sepr ',2),'$sepr',-1)
, substring_index(substring_index(cate,'$sepr',3),'$sepr',-1)
, substring_index(substring_index(cate,' $sepr', 4),'$sepr',-1)
, substring_index(substring_index(cate,'$sepr',5),'$sepr',-1)
FROM upcm
SQL

教えてください。 、マスター、これは SQL を使用して直接実行できます。PHP を介して手を変更せずにコマンドが完了するとはどういう意味ですか?
PHP を使用して SQL ファイルを作成し、それを SQL で実行しますか?

私も同じ状況に遭遇しました。問題がまだ解決せず…困っています…

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート