私はphpとmysqlでかなり奇妙な問題を抱えています。私のphpスクリプトで次のことをしています:
$query1 = "SELECT * FROM ".$src;
$ans1 = mysql_query($query1,$vitoquenId);
echo "<p>Query: \"".$query1."\"<br/>Error: \"".mysql_error()."\"<br/>Total rows extracted: ".mysql_num_rows($ans1)."</p>";
これを行うとき、これは出力です:
Query: "SELECT * FROM Almacen"
Error: ""
Total rows extracted: 0
問題は、imが0行を取得することを想定していないことです。奇妙なことに、エラーは報告されません。ユーザーにすべてのアクセス許可を付与し、rootユーザーとしてデータベースに接続しようとしましたが、同じ動作をしました。
mysqlコマンドラインで直接クエリを実行すると、次のようになります。
mysql> SELECT * FROM Almacen;
+----+-------------+------------+--------+
| id | nombre | tipo | status |
+----+-------------+------------+--------+
| 1 | Tienda | Principal | Activo |
| 2 | Dep�sito | Secundario | Activo |
| 3 | Chaguaramos | Secundario | Activo |
+----+-------------+------------+--------+
3 rows in set (0.00 sec)
xamppサーバーと、自分で構成したサーバーを使用してみましたが、同じ動作が得られました。考えたすべてのログをチェックし、すべてのクエリをログに記録するようにmysqlを構成しましたが、異常は発生していないようです。
mysqlログには次の情報が表示されます。
110802 16:21:49 101 Connect victor@localhost on
101 Init DB saw
101 Init DB sawprueba
101 Query SELECT * FROM Almacen
101 Quit
apacheログには何も表示されず、サイト固有のログも表示されません。どうか、これを解読しようとする手がかりは非常に高く評価されます!!! ありがとう!!!=)
編集:
問題を見つけました。それはaefxxの答えと関係があります。
プログラムimwritingは移行ツールです。あるデータベースから情報を抽出して処理し、別のデータベースに挿入します。そのためには、2つのデータベースに接続する必要があります。PHPのドキュメントで提案されているように、シングルトンパターンを使用して2つのクラスを介して接続します。接続ファイルはgithubリポジトリで確認できます。
dbに接続するには、次のようにこのクラスを呼び出します。
$vitoquen = Vitoquen::singleton();
$newVitoquen = NewVitoquen::singleton();
$vitoquenId = $vitoquen->getId();
$newVitoquenId = $newVitoquen->getId();
何が起こっているのかというと、何らかの理由で、2つの別々の接続を作成せず、代わりに1つの接続だけを作成し、空の2番目のデータベースである新しいデータベースを使用します。mysqlログを見たときに手がかりを得ました:
110802 16:21:49 101 Connect victor@localhost on
101 Init DB saw
101 Init DB sawprueba
101 Query SELECT * FROM Almacen
101 Quit
101InitDBが2回表示されます。1つはのためにsaw
、もう1つはsawprueba
。今、私はそれが2つの別々の接続を作成しない理由を理解していません...何か提案はありますか?
ご助力ありがとうございます!!!=)
編集:
私はまだ自己回答できませんが、これが私の問題の解決策です。とにかくこれを読んで(そしていくつかの答えを)時間を割いてくれた人々に感謝します!
php mysql_connect()関数のドキュメントに見られるように、デフォルトnew_link
でと呼ばれるオプションのパラメーターを受け取りfalse
ます。
new_link
同じ引数を使用してmysql_connect()を2回呼び出すと、新しいリンクは確立されませんが、代わりに、すでに開いているリンクのリンク識別子が返されます。new_linkパラメーターはこの動作を変更し、同じパラメーターでmysql_connect()が以前に呼び出された場合でも、mysql_connect()が常に新しいリンクを開くようにします。SQLセーフモードでは、このパラメータは無視されます。
したがって、両方の接続クラスでmysql_connect()の呼び出しに追加の最後のパラメーターとしてtrueを追加する必要がありました。解決済み=)