2011-08-02 10 views
0

私はphpとmysqlでかなり奇妙な問題を抱えています。イムは、私のPHPスクリプトでは、次のこと:phpとmysqlの奇妙な問題。すべてが正常であると思われるときに選択された行はありませんか?

$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 

事があり、イムは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のサーバーを使用してみました、とも構成・バイ・自分自身のサーバ、および同じ動作を得ました。 Iveは考えているすべてのログをチェックし、すべてのクエリをログに記録するようにmysqlを構成しました。

110802 16:21:49  101 Connect [email protected] on 
         101 Init DB saw 
         101 Init DB sawprueba 
         101 Query SELECT * FROM Almacen 
         101 Quit 

Apacheのログには何も表示さdoesntの、どちらのサイトの特定のログ:

mysqlのログには、次を示しています。どうぞ、これを解読しようとするどんな手がかりも非常に感謝します!!!ありがとう! =)

EDIT:

私は問題を発見しました。それはaefxxの答えと関係があります。

プログラムの書き込みは、移行ツールです。あるデータベースから情報を抽出し、処理し、別のデータベースに挿入します。これを行うには、私は2つのデータベースに接続する必要があります。私はPHPのdocumentationで提案されているシングルトンパターンを使って2つのクラスを使って接続します。接続ファイルはgithub repoにあります。 DBへの接続を行うために

、私はこのように、このクラスを呼び出す:

​​

何が起こっていることは、何らかの理由で、それは二つの別々の接続を作成し、代わりに一つだけの接続を作成していないということです、空の新しい2番目のdbを使用します。

110802 16:21:49  101 Connect [email protected] on 
         101 Init DB saw 
         101 Init DB sawprueba 
         101 Query SELECT * FROM Almacen 
         101 Quit 

それが二回101初期DBを示し;:私は、mysqlのログを見たとき、私は手がかりを得ました1つはsaw、もう1つはsawpruebaです。今私はそれが2つの別個の接続を作成しない理由を理解していない...任意の提案???

ありがとうございました! =)

EDIT:

私はまだ自分の答えをカントが、これは私の問題を解決します。とにかくこれを読んで(そしていくつか答えて)時間を取った人に感謝します!

php mysql_connect() functionのドキュメントにあるように、デフォルトでfalseというnew_linkというオプションのパラメータを受け取ります。 2番目の呼び出しが同じ 引数でmysql_connect()をするために行われた場合

new_linkが
、新たなリンクが確立されず、代わりに既にオープンされたリンク 識別子が返されます。 new_link パラメータはこの動作を変更し、前に同じ パラメータでmysql_connect()が呼び出されたとしても、mysql_connect()は新しいリンクを常に に開きます。 SQLセーフモードでは、このパラメーターは無視されます。

これで、両方の接続クラスでmysql_connect()の呼び出しに追加の最後のパラメータとしてtrueを追加するだけでした。 SOLVED =)

+3

「$ vitoquenId」とは何ですか?それは有効なMySQLリソースですか? – TehShrike

+1

$ ans1の 'var_dump' –

答えて

1

DBMSに接続するときに適切なデータベース(スキームとも呼ばれます)を選択しましたか?

例:

mysql_select_db("mydatabase", $link); 
1

はのが問題のテーブルについては「考えて」何のmysqlを参照するためにいくつかの最小限エラー処理と余分なクエリを追加してみましょう。

$query1 = "SHOW TABLE STATUS LIKE '$src'"; 
echo '<pre>Debug: query1=', $query1, "</pre>\n"; 
$ans1 = mysql_query($query1, $vitoquenId) 
    or die(mysql_error()); 
while (false!==($row=mysql_fetch_assoc($ans1))) { 
    foreach($row as $key=>$value) { 
     echo $key,'="', $value, '" '; 
    } 
    echo "<br />\n"; 
} 

$query1 = "SELECT * FROM ".$src; 
echo '<pre>Debug: query1=', $query1, "</pre>\n"; 
$ans1 = mysql_query($query1,$vitoquenId) 
    or die(mysql_error()); 
echo "<p>Query: \"".$query1."\"<br/>Error: \"".mysql_error()."\"<br/>Total rows extracted: ".mysql_num_rows($ans1)."</p>"; 
関連する問題