2009-03-13 8 views
0

これは私にとって新しいものです。基本的に私は、テーブルアーティクルている:今、私はするmysql_queryと、このテーブルへの挿入を行うPHP MySQLがデータを落とす

id: int auto increment 
title: varchar(200) 
description: varchar(1000) 
ctext: longtext 
chtml: longtext 

INSERT INTO articles 
(title, description, ctext, chtml) 
VALUES 
('$title', '$description', '$text', '$html') 

をすべての値は)(mysql_escape_stringを通過してきました。

ここでのテキストとhtmlのサイズは約50kです(ここで完全にクエリを投稿することはできません)。

ここで問題があります。クエリが機能します。新しい行が挿入されます。ただし、ctext列とchtml列は空のです。これはMySQL 5.0.51aとPHP 5.2.8です。私が知る限り、どんな種類のエラーも発生していません。

は今、私は/ tmpにファイルに出クエリをダンプし、それを実行しました:

mysql -u username -p dbname < /tmp/query 

同じこと。

私はNavicatにクエリをコピーして、それを動作させます。

だから地球上で何が起こっているのですか?

答えて

2

いくつかのランダムな思考:

  • は、あなたはそれが一点のみで障害が発生した場合は、テキストの長さが参照制御しようとしたことがありますか?
  • あなたはどのような接続を開いていますか?どのドライバー?
  • 接続のエンコーディングを確認しましたか?無効な文字が入力されている可能性があります。
  • mysql_escape_stringの代わりにparametersを使用しましたか?
  • コピーペーストを使用する代わりにNavicatから同じファイルから直接実行しようとしましたか?この場合も、コピー貼り付けを通過せずにファイルに保存された無効な文字に関連している可能性があります。
  • 私たちはしばしば忘れる基本をカバーするだけで、データが挿入されていないことをどのように確認しますか?つまり、どのように視覚化するのですか?あなたは、視覚化の3つの手段のうち2つから最初の線を隠す改行を持つことができます。ほんの一瞬ですが、私はそれが起こるのを見ました。

追加:デフォルトはlatin1のためのMySQLの接続には、Unicode文字を転送するmysql_query("SET NAMES 'utf8'")のようなものを使用する必要があります。

+0

テキストの長さ:まだありません。接続:ちょうどmysql_connect()。エンコーディング:あなたに戻ってください。パラメータ:私はもともとmysqliを使用していましたが、その方法もバグです。ファイルから直接:いいえ、私は行います。検証:Navicatでは(動作したこのクエリの1つの例のように)動作しているときにNavicatで見ることができます。 – cletus

+0

PDOもご覧ください。今までは素晴らしい結果が出ています。 – lpfavreau

+0

エンコーディングはlatin1です。 – cletus

1

私はこの問題かどうかわからないんだけど、mysql_escape_stringは非推奨となり、あなたは小さなテキストでそれを試してみましたmysql_real_escape_string

に置き換えますか?

+0

mysql_real_escape_stringは違いがありません。はい、私は小さなテキストで試して、それを動作させたが、実際にはクエリのサイズに制限はなく、サイレントにデータを挿入しないというのは本当に悪いようです。 – cletus

+0

さて、あなたはmysql_queryの戻り値をチェックしますか? falseを返すと、エラーが発生しました。 PHPのMysqlはそれ自身で警告をスローしません。挿入後にmysql_errorの値を確認してください。 –

+0

はい私はすべてのクエリでそれを行います。私はmysql_queryを直接使用しません。 mysql_errorをチェックしてエラーが記録された場合は、それらのコードブロックで自分のコードを捨てる必要はありません。 – cletus

関連する問題