2016-06-23 5 views
0

まず、このシステムではもうmysql_関数を使用するべきではないことがわかりました。mysql_select_dbの後に正しいデータベースでMySqlクエリが実行されていない

システムは2つのデータベースに接続しています。クエリを実行する前に、mysql_select_db()を使用してクエリを実行する正しいデータベースを選択しています。正しいデータベースは 'database2'です。データベース自体への接続が機能し、mysql_select_db関数がtrue/1を返しています。

コードがローカルに動作しますが、ここで

が失敗したクエリの例です...サーバーでは動作しません...

global $DBtwo; 

mysql_select_db('database2', $DBtwo); 

$sql = "INSERT INTO table 
     (Column1, Column2, Column3) 
    VALUES 
     ('Value1', 'Value2', 'Value3')"; 

$result = mysql_query($sql, $DBtwo); 

die(mysql_error()); 

このスクリプトは、次の出力を返します...

このエラーは、クエリがdatabase2ではなくdatabase1で実行されていることを示しています。ただし、クエリが実行される前にdatabase2が正常に選択されています。

前述のとおり、このエラーはサーバーでのみ発生します。ローカルで実行するとクエリが機能し、正しいデータベースが使用されます。

ご意見やご指摘をお待ちしております。乾杯。

+1

あなたは単にselect_db呼び出しが成功したと仮定しているだけです。 mysql_select_db(...)またはdie(mysql_error($ DBtwo)) 'を実行して、接続ハンドルが明示的にリストされていないため、複数のdb接続を開いている場合、エラー呼び出しは最後に開いたものを使用します。つまり、WRONG dbハンドルのエラーをチェックしている可能性があります。 –

+0

ご回答いただきありがとうございます。私は調査中です... – Moggz

+0

MySQLの使用を中止し、 'MySQLi'を'/'' '' PDO''と同様に調査します。 OOPアプローチを使って研究することもできます。データベースを混在させるというこの問題は、そのコード構造で実現する可能性が低く、不可能でさえあります。 – Martin

答えて

1

Marc Bのコメントは私の問題を解決し、クレジットは彼に向かっています。

mysql_error関数は、リソースが渡されていないため誤った情報を返していました。

mysql_select_dbが実際に動作していました。これは、mysql_errorに正しいリソースを渡さないという組み合わせによって動作しないという印象を与えました。その上に同じ理由でmysql_insert_id()が機能していなかったため、関数全体がfalseを返すようになりました。

私は今、愚かだと思うが、はるかに迷惑になる。どうもありがとう!

+0

これがあなたの問題を解決すれば、答えとしてそれを受け入れることができますので、他の人もそれから恩恵を受けることができます。 – apokryfos

関連する問題