ホームページ  >  記事  >  バックエンド開発  >  PHP でスリープを使用することによって発生する mysql 読み取りエラーのケースと解決策、sleepmysql_PHP チュートリアル

PHP でスリープを使用することによって発生する mysql 読み取りエラーのケースと解決策、sleepmysql_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:20:18852ブラウズ

PHP で sleepmysql を使用することによって引き起こされる mysql 読み取りエラーのケースと解決策

最近、プロジェクトのニーズにより
特定の操作を実行するには、スリープ関数を使用してデータベースから大量のデータを定期的にフェッチする必要があります。
寝るまでの待ち時間は最低1時間
以前にテストを行ったことがある
スリープ機能を使用すると、数時間後に実行された操作を完了することが可能です

しかし、邪悪な問題が発生しました
プログラムでsleepを使用した後、データベースから対応する情報を取得できないことがわかりました
睡眠を削除します
結果は正常です

押し下げられた。 。 。
スリープはライブラリの読み取り動作に影響しますか? ! !
テストの便宜のため
sleep(10)して10秒以内に実行するだけです
結果はデー​​タベースから情報を読み取ることができます

しかし、なぜ sleep() は 1 時間後に情報を読み取れないのでしょうか?
テストの便宜上、sleep ステートメントの前に一度ライブラリを直接読み込み、sleep ステートメントの後に再度ライブラリを読み込みます
例:

コードをコピーします コードは次のとおりです:

require_once('include.php');
//データベース情報を読み取る
$data = $db->getList();
print_r($data);

// 1時間後の時間を設定します
睡眠(3600);

//情報をもう一度読んでください
$data = $db->getList();
print_r($data);

?>

判明しました
初めての図書館読書は成功しました
2番目の読書ライブラリは空です

そこでスリープを10秒に変更して再度テストしてみました
コードをコピーします コードは次のとおりです:

require_once('include.php');
//データベース情報を読み取る
$data = $db->getList();
print_r($data);

// 10秒後のタイマー
睡眠(10);

//情報をもう一度読んでください
$data = $db->getList();
print_r($data);

?>

以上の結果です
ライブラリを2回読み込むことに成功しました

1 時間後にデータベースの読み取りに失敗し、10 秒後には成功するのはなぜですか? ?
シングルトンデータベース操作クラスを使用します
という疑問が浮かびます
データベース接続がタイムアウトになり、データベースの読み取りが失敗した可能性がありますか?
そこで、ここでのデータベース読み取り操作をインスタント接続に急遽変更しました
コードをコピーします コードは次のとおりです:

require_once('include.php');
//データベース情報を読み取る
$data = getList();
print_r($data);

// 1時間後の時間を設定します
睡眠(3600);

//情報をもう一度読んでください
$data = getList();
print_r($data);

//データベース情報を読み取る
関数 getList(){
$pdo = 新しい PDO('mysql:host=localhost;dbname=test','root','root');
$result = $pdo->query('select * from tables');
return $result->fetchAll(PDO::FETCH_ASSOC);
}
?>

テスト成功! !
スリープによりシングルトン クラスがタイムアウトになり、実行時間が長すぎるとデータベース接続が切断され、データベース情報を読み取れなくなる可能性があることがわかりました。

phpがWebページを読み取った後、ソースコードをMYSQLに保存できませんでしたか?

処理されない特殊文字がいくつかあるはずですが、addslashes() を使用して変換できます。
それが機能しない場合は、base64_encode() を使用して暗号化し、再度保存します。
使用したら、取り出して、base64_decode() を使用して復号化します。

phpがmysqlを読み込む問題について

sql语句这样写select name for 表名 where...
その後读取第0个

または使用できる関数
mysql_fetch_array

例2. mysql_fetch_arrayの使用MYSQL_NUM

mysql_connect("ローカルホスト" , "mysql_user", "mysql_password") or
die("接続できませんでした: " . mysql_error());
mysql_select_db("mydb");

$result = mysql_query("SELECT id, name FROM mytable");

while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
printf ("ID: %s 名前: %s", $row[0], $row[1]);
}

mysql_free_result($結果);
?>

例子 3. mysql_fetch_array は MYSQL_ASSOC を使用します

mysql_connect("localhost", "mysql_user", "mysql_password") or
die("接続できませんでした: " . mysql_error());
mysql_select_db("マイデータベース");

$result = mysql_query("SELECT id, name FROM mytable");

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
printf ("ID: %s 名前: %s", $row["id"], $row["name"]);
}

mysql_free_result($result);
?>

例子 4. mysql_fetch_array は MYSQL_BOTH を使用します

mysql_connect("localhost", "mysql_user", "mysql_password") or
die("接続できませんでした: " . mysql_error());
mysql_select_db("myデータベース");

$result = mysql_query("SELECT id, name FROM mytable");

while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
printf ("ID: %s 名前: %s", ……残り下全文>>
 

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/867253.html技術記事 PHP で mysql の呼び出しに失敗したスリープ造のパターンと方法を使用しています。sleepmysql の近日、sleep 関数の要求に必要なため、データストア取得の蓄積データから特定の実行を実行します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。