2012-01-06 4 views
0

フィールドa、b、c、dを持つmysqlテーブルfooに複数のレコードがあり、aが主キーであるとします。レコード1は、a = 1、b =真、c = val1a、d = val2aのデータを有する。 私はPHPを使用してデータにアクセスしたい場合は、私が行いますPHP MYSQLはmysqlへの連想配列(レコード)を書き込みます

$result = mysql_query("SELECT * FROM foo WHERE a = '1'"); 
$rec = mysql_fetch_array($result); 

bとcを変更するには、私はどうなる:

mysql_query("INSERT INTO foo (b,c) VALUES (false,'newval') WHERE a = '1'"); 

がすべてリストアップすることなく、全体のレコードを書き込むためにそこの方法ですフィールド(a、b、c、d)?私がやりたい何

はfooテーブルに戻って全体の$ RECを書くです:私はforeachの操作を行うと、全体のインサートを構築することができ知っ

$rec['b'] = false; 
$rec['c'] = 'newval'; 
mysql_query("INSERT INTO foo $rec"); 

、すでにないPHP関数があります私は何を達成しようとしていますか?

答えて

3

かんたん回答 - いいえ。値を挿入するときに考慮すべき事項がたくさんあります。そのタイプは何か、エスケープされているかどうか、それらの周りに引用符が必要かどうかなどです。したがって、一般的にすべての値を同じように扱うことはできません。文字列に追加されます。 MySQLiのような拡張子を使用することをお勧めします。スティッキングを連結してクエリを構築しないでください。単純な関数は、あなたが推測したようにループで必要なことをすることができますが、私はそれをお勧めしません。

も ​​- あなたは何かについて間違っている:

mysql_query("INSERT INTO foo (b,c) VALUES (false,'newval') WHERE a = '1'"); 

は無効な構文です。 UPDATEchange b and cを使用する必要があります。 idの周りに引用符を使用する必要はありません。つまり、WHERE a = '1'WHERE a = 1である必要があります。これは整数値です。

+0

はい、タイプミス、私はUPDATEを意味しました。私はしばらくの間、mysqlを行ってきましたが、レコードの変更、レコードの変更の書き込み、mysql_fetch_arrayのレコードが連想配列として読み込まれ、選択がすべてのフィールドに適用され、php関数が書き込まれる連想配列をそこに戻す。私はmysqliのものを見て、それを使っています。 – user999684

+0

読み取りと書き込みとは非常に異なります。すべてのデータを読み取るときは、DBに格納されているとおりに文字列として返されます。したがって、書き込みが行うすべての型の検証、エスケープなどは必要ありません。 OTOHでは、さまざまなフィールドやデータに適切なアクションを取らずに書き込むことで、エラー、不正なデータやセキュリティの問題が発生しやすくなります。 – Nikoloff

+0

情報ありがとうございます。このことを説明する良い記事がありますか?だから、レコードのint型フィールドを読み込んだ場合、それを文字列として返します。それで、もし書き直すと、データベースが壊れてしまいます。そうではありません。あなたは、値123のintfldというintフィールドがある場合、上記のメソッドを使ってそのフィールドを読み込み、$ var1 = $ rec ['intfld']のような変数に代入してからmysql_query( "UPDATE foo SET intfld = "'。$ var1。'" WHERE a = '1' ");それはデータベースの破損を引き起こすでしょうか?私はあなたの助けに感謝します。 – user999684

0

私のMySQLは少し錆びていますが、私はあなたがそのような挿入を行うことができるかどうかはわかりません。あなたは通常、新しい値の更新ステートメントを作成し、それは一般的に回避しようとしているforeachループを必要とします。

おそらくdoctrineのようなものを使用して、http://www.doctrine-project.org/を使用して、行を抽象とフェッチを処理するオブジェクトに抽象化したいとします。

関連する問題