2012-04-13 14 views
0

私はMySQLテーブルからデータを取り出してページに表示しています。スクリプトは情報を表示していますが、私のテーブルには通常の引用符が挿入されています。 (’)(“ ”)は、Microsoft Word 2010で何かが入力されたときにこのように自動的にフォーマットされます。これは、テーブルのほとんどのエントリを入力するために使用されました。だから私の推測はの特殊文字です。しかし、私が実際に一重引用符でフィールドを表示することをテストするたびに、が返されます。mysql_fetch_rowは、パラメータ1がリソースになることを期待しています。ブール値はです。これは、私が使用するコードです:MySQLテーブルのフィールドを表示しますが、引用符を含むフィールドは表示されません。

$result = mysql_query("SELECT `question` FROM {$db_table_alt}"); 

while($field = mysql_fetch_row($result)) { 
foreach($field as $fields) { 

//build a unique section ID based on the ID that the Question belongs to 
$uid = mysql_query("SELECT `id` FROM `questions` WHERE `question` LIKE '%$fields%'"); 
while($uidfield = mysql_fetch_row($uid)) { 

しかし、私はこの行を使用するとき $fields = mysql_real_escape_string(stripslashes($fields)); 実際の引用符とフィールドが表示されますが、前方に引用符の前にスラッシュ。 誰かが私にこの解決策を見つけるのを助けることができますか?

+1

テーブルの実際のデータとは何ですか?その列でselectを実行すると、使用しているphpmyadminやクライアントは何を表示しますか? –

+0

phpmyadminを使用すると、クエリに対応する列が正しく表示されますが、PHP全体で(引用符であれば、mysql_real_escape_stringを表示し、表示されないようにします)状況にPHPが表示されます。 – Tower

+0

これらの2つのテーブル間の接続は何ですか? $ db_table_alt変数には何が入っていますか? 2つのクエリは必要なく、1つのみが必要なようです。 –

答えて

-1

mysql_fetch_row()は、mysql_queryが行を戻さなかったか、またはSQLにエラーがある(mysql_error()があなたに通知する)ブール値を告訴している場合。

返されたデータの引用符より前にバックスラッシュが表示されている場合は、データベースに格納されています。 magic_quotesのように聞こえます。問題を時代遅れにして壊れた解決策なので、実際にはそれを無効にしたいと思っています。

また、文字エンコーディングについて学ぶ必要があると思います。デフォルトのMySQLインストールはUTF8ではありません。恐らくISO-8859-15になるでしょう。同じではないWindows-1252でテキストを書くのが好きだったWord。そして、それはどのブラウザ、ウェブサイト、そしてデータベースと話す他のものであれ、より複雑になります。私はPhpMyAdminがUTF8で実行しようとしていると思いますので、はUTF8でなければテーブルに変換されます。これは "スマート引用符"を探すクエリにも影響します。

+0

Magic_quotesが有効になっていない、私はコードの行を実行した 'echo"マジック引用符は "です。 (get_magic_quotes_gpc()? "ON": "OFF"); '返された** OFF ** – Tower

-1

ここには2つの異なる問題があるようです。

ここで、$resultはブール値に評価されます。つまり、生成されたクエリにエラーがあります(SELECT question FROM {$db_table_alt})。そのクエリをエコーし​​て手動で実行してみてください。 {$db_table_alt}という名前のテーブル/ビューが存在しないことがあります。

2番目の文字列エスケープ問題です。私は引用符がデータベースでエスケープされることを期待しています - クエリでmysql_real_escape_stringを使用すると、返された結果がエスケープされるかどうかは変わりません。

また、データベースのデータがスラッシュでエスケープされている場合は、マジッククォートとその対処方法をお読みください。PHP docs on magic quotes。 DBからデータを取り出すときに、エスケープ文字列を使用する必要はありません。

+0

私はクエリーをエコーし​​て手動で実行し、すべてのフィールドを 'real私はテストをしていました。しかし、ページの一番下には、 'real quotes'を含むフィールドが、他のすべてのものと同じように段落の形式で表示されるはずです。mysql_fetch_rowエラーが発生します。何か案は? – Tower

+0

mysql_fetch_rowに渡すリソースはリソースではありません。それはおそらくどこかで上書きされていますが、コードなしで言うのは難しいです。標準的な方法は、無関係のコードをすべて削除して、期待したことをしていない部分だけが存在するようにすることです。ほとんどの場合、これが問題を解決します。 – sennett

+0

ここにフィールドを表示するために使用しているすべてのコードのコピーがありますので、もう少し私を助けることができます。 http://pastebin.com/6cVNCfYx – Tower

関連する問題