書き方の違いについて

このQ&Aのポイント
  • $sqlの値を直接代入している
  • $sqlに文字列を連結している
  • どちらも問題なく動作しますが、$sqlに文字列を連結する方が可読性が良いです
回答を見る
  • ベストアンサー

書き方の違いについて

(1)$sql ="insert into t_pdf_manage (name,size,upload_time,modify_time,flg) values('$name',$size,now(),now(),1)"; (2)$sql ="insert into t_pdf_manage (name,size,upload_time,modify_time,flg) ";    $sql.=" values('$name',$size,now(),now(),1)"; (1)と(2)の違いは何ですか? どちらも問題なく動作します。メリット・デメリット等がありましたら、教えていただけると幸いです。

  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

書き方のポリシーの問題でしょうね 80文字程度でそれ以上書かないようなルール付けをしていると 自然と(2)のような書き方になります。 プログラム的には全く意味がなくむしろサイズが大きくなるので 無駄なのですが、人が作業する上では ・デバッグするときのエラー行を確定したり ・水平スクロールをしないようにしたり、 ・印刷するときに桁あふれしないようにしたり、 ・ソースを追加・削除するときに楽だったり そんなかんじの運用面での問題です。 掲示板の発言を文脈で改行する人もいれば、改行しないで そのままつなぎで書く人もいるようなものです。 特にどちらが優れているというものではありません。

egawa0812
質問者

お礼

yambejp さん、ありがとうございます。 仕事上、複数の人間がいじる時には(2)の方が見やすくて良さそうですね。 僕も「自分の書き方」を確立できるくらいまで、PHP習得したいです。 勉強になりました。

その他の回答 (1)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

後者は複合演算子を使って「追加」しているだけですね。それ以外の違いはありません。print $sql; とすれば、まったく同じ内容が表示されるハズです。 http://www.php.net/manual/ja/language.operators.assignment.php それよりもSQL文なのにエスケープが何も施されていないことの方が気になります(汗

egawa0812
質問者

お礼

shimix さん、ありがとうございます。 そういうことなんですね。勉強になりました。 それとエスケープのご指摘ありがとうございます。 早速、mysql_real_escape_stringを追加しました。

関連するQ&A

  • htmlとphpの分離

    お世話になります。 ビジュアルをcssで調整するために、htmlとphpの分離したいんですが、どう分ければいいか教えていただけませんか? ソースはこれです↓ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <link rel="stylesheet" type="text/css" href="base.css"> <title>ファイルのアップロードフォーム</title> </head> <body> <form enctype="multipart/form-data" method="post"> <input type="file" name="myfile" size="30"> <input type="submit" value="アップロード"> <?php //全てのエラー・警告を出力する ini_set('error_reporting', E_ALL); //アップするディレクトリ $uploads_dir = '../../file_manager/uploads'; //データベースに接続 $con = mysql_connect('','',''); mysql_select_db(""); //セットされているかのチェック if(isset($_FILES["myfile"]) and $_FILES["myfile"]["type"]=="application/pdf" and $_FILES["myfile"]["error"] == UPLOAD_ERR_OK) { $tmp_name = $_FILES["myfile"]["tmp_name"]; $name = mysql_real_escape_string($_FILES["myfile"]["name"]); $size = $_FILES["myfile"]["size"] / 1024; //テーブルに格納 $sql ="insert into t_pdf_manage (name,size,upload_time,modify_time,flg) values('$name',$size,now(),now(),1)"; mysql_insert_id(); mysql_real_escape_string($sql); $sql .=" on duplicate key update size=$size,modify_time=now(),flg=1"; $result=mysql_query($sql,$con); //テーブルからidを抽出 $sql ="select id from t_pdf_manage where name='$name'"; $result=mysql_query($sql,$con); //添字配列でidを取得 $row=mysql_fetch_row($result); $up_name=$row[0]; //ファイル名をidにしてアップ move_uploaded_file($tmp_name, "$uploads_dir/$up_name"); } if(isset($_POST["del"]) and is_array($_POST["del"])) { $sql ="update t_pdf_manage set flg=0 where id in("; $flg=true; foreach($_POST["del"] as $val) { if($flg) {$flg=false;} else {$sql.=",";} $sql .="'".mysql_real_escape_string($val)."'"; } $sql .=")"; $result=mysql_query($sql,$con); } $sql ="select id,name,size,upload_time,modify_time from t_pdf_manage where flg=1"; $result=mysql_query($sql,$con); print "<table border=1>\n"; print "<tr>\n"; print "<th>名前</th>\n"; print "<th>サイズ(KB)</th>\n"; print "<th>アップロード</th>\n"; print "<th>更新</th>\n"; print "<th>表示</th>\n"; print "<th>削除</th>\n"; print "</tr>\n"; while($row=mysql_fetch_array($result,MYSQL_ASSOC)){ print "<tr>\n"; print "<td>".htmlspecialchars($row["name"])."</td>\n"; print "<td>".$row["size"]."</td>\n"; print "<td>".$row["upload_time"]."</td>\n"; print "<td>".$row["modify_time"]."</td>\n"; print "<td><a href=\"hyouji_test.php?id=" . $row["id"] . "\" target=\"new\"><img src=\"pdf.gif\"/></a></td>\n"; print "<td><input type=\"checkbox\" name=\"del[]\" value=\"".$row["id"]."\"></td>\n"; print "</tr>\n"; } print "</table>\n"; mysql_close($con); ?> <input type="submit" value="削除"> </form> </body> </html>

    • ベストアンサー
    • PHP
  • 複雑なクエリ

    最近の連続失敗回数が3回の登録番号を求めるクエリがわかりません。 教えてください。 DBは、MySQL version: 4.0.22で、副問合せ等は使用できません。 create table t_test( n_no integer,-- 登録番号 n_flg integer,-- 0:成功1:失敗 d_update date-- 更新日付 ); insert into t_test (n_no, n_flg, d_update)values (1,0,'2007-06-01'); insert into t_test (n_no, n_flg, d_update)values (1,0,'2007-06-02'); insert into t_test (n_no, n_flg, d_update)values (1,0,'2007-06-03'); insert into t_test (n_no, n_flg, d_update)values (1,1,'2007-06-04'); insert into t_test (n_no, n_flg, d_update)values (1,1,'2007-06-05'); insert into t_test (n_no, n_flg, d_update)values (2,0,'2007-06-01'); insert into t_test (n_no, n_flg, d_update)values (2,0,'2007-06-02'); insert into t_test (n_no, n_flg, d_update)values (2,1,'2007-06-03'); insert into t_test (n_no, n_flg, d_update)values (2,1,'2007-06-04'); insert into t_test (n_no, n_flg, d_update)values (2,1,'2007-06-05'); insert into t_test (n_no, n_flg, d_update)values (3,0,'2007-06-03'); insert into t_test (n_no, n_flg, d_update)values (3,1,'2007-06-04'); insert into t_test (n_no, n_flg, d_update)values (3,1,'2007-06-05'); insert into t_test (n_no, n_flg, d_update)values (3,1,'2007-06-06'); insert into t_test (n_no, n_flg, d_update)values (3,0,'2007-06-07');

    • ベストアンサー
    • MySQL
  • 複数行をINSERTで『ORA-00911: 文字が無効です。』というエラーが出てしまいます。

    SQL初心者です。 CommonSQLEnvironmentを使用して複数行のデータを登録したいのですが、 ****************************************** INSERT INTO KAIIN_MST (NO, FNAME, NAME, YMD, FLG) VALUES ('001', 'ヤマダタロウ', '山田太郎',TO_CHAR(SYSDATE, 'YYYYMMDD'), '1'); INSERT INTO KAIIN_MST (NO, FNAME, NAME, YMD, FLG) VALUES ('002', 'ヤマダハナコ', '山田花子',TO_CHAR(SYSDATE, 'YYYYMMDD'), '1'); ****************************************** この状態で実行すると、『ORA-00911: 文字が無効です。』と出ます。 セミコロン(;)を抜いて ****************************************** INSERT INTO KAIIN_MST (NO, FNAME, NAME, YMD, FLG) VALUES ('001', 'ヤマダタロウ', '山田太郎',TO_CHAR(SYSDATE, 'YYYYMMDD'), '1') INSERT INTO KAIIN_MST (NO, FNAME, NAME, YMD, FLG) VALUES ('002', 'ヤマダハナコ', '山田花子',TO_CHAR(SYSDATE, 'YYYYMMDD'), '1') ****************************************** を実行すると『ORA-00933: SQLコマンドが正しく終了されていません。』と出ます。 ちなみに1行のみ実行で ****************************************** INSERT INTO KAIIN_MST (NO, FNAME, NAME, YMD, FLG) VALUES ('001', 'ヤマダタロウ', '山田太郎',TO_CHAR(SYSDATE, 'YYYYMMDD'), '1') ****************************************** は成功します。 また、 ****************************************** INSERT INTO KAIIN_MST (NO, FNAME, NAME, YMD, FLG) VALUES ('001', 'ヤマダタロウ', '山田太郎',TO_CHAR(SYSDATE, 'YYYYMMDD'), '1'), ('002', 'ヤマダハナコ', '山田花子',TO_CHAR(SYSDATE, 'YYYYMMDD'), '1'); ****************************************** というものも試してみましたが駄目でした。 CommonSQLEnvironmentでの複数行追加の良い方法がありましたら教えて頂ければ幸いです。 宜しくお願い致します。

  • 配列の初歩2

    PHP+MYSQLに挑戦しているプログラミング入門者です。、 昨日 http://oshiete1.goo.ne.jp/qa3720566.html に続き全く初歩的な質問で申し訳ございません。 知識が乏しいため本を読んでもわからず、 いろいろ試してもだめなため、再度質問させていただきます。 t1 +-+-+ |n|n2| +-+-+ |1|2| +-+-+ |3|4| $bat=array(5=>6,6=>7,7=>8); $sql = "insert into t1 values(5,number)"; なら |5|5| $sql = "insert into t1 values(5,'{$bat[5]}')"; なら |5|6| が追加されますが $sql = "insert into t1 values(5,'{$bat[number]}')"; だと |5|0| となってしまいます。これを |5|6| とするにはどうしたらよいのでしょうか 何卒よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでレコード追加(MYSQL)が出来ません

    以下のようにするとうまくいってたのが、 ひとつフィールドを増やすとうまくいきません。 単純なミスだろうと思い、数時間格闘していますが見つかりません。 よろしくご教授お願いいたします。 MYSQL table mem id vacher(10) name vacher(100) pass varcher(8) regdate date PHP $sql = "insert into mem (id , name , pass ,regdate) values ('$id', '$name', '$pass', now())"; ↓↓↓↓↓↓ MYSQL table mem id vacher(10) name vacher(100) pass varcher(8) regdate date kikan varcher(100) PHP $sql = "insert into mem (id , name , pass ,regdate ,kikan) values ('$id', '$name', '$pass', now() ,'$kikan')";

    • ベストアンサー
    • MySQL
  • INSERT INTOに関しまして。

    $sql = "INSERT INTO テーブル名(name,day,kg)VALUES('','$day','-1')"; 現在このようなSQL文でINSERTしていますが、データベース内にあるカラムname全てに対してINSERTするにはどうすれば良いでしょうか??現在のSQL文ではそれができず、nameが空欄の状態で更新されてしまいます。

    • ベストアンサー
    • PHP
  • ファイルに記述されている複数のSQL文を一度に実行させたい

    こんにちわ。 ファイルに記述されているSQL文を、Linuxのコマンドラインなどから 実行したいと考えています。 ファイルに insert into DB_NAME(aaa,bbb,ccc) values(111,222,333); insert into DB_NAME(ddd,eee,fff) values(333,777,222); insert into DB_NAME(aaa,ttt,ddd) values(111,000,999); ... などのSQL文が複数行(例えば1000個ほど)記述しているのを用意して なんかしらの方法で一度に実行させたいのです。 mySQLでは、このようなやり方があるのですが postgreではどのようにすればいいのか、わかりません。 どなたかご存知の方、よろしくお願い致します。 OSはLinuxです。

  • php postgres Insert と updateができない

    こんにちは、 現在、php5とpostgresql8でプログラムを行っています。 それで、 $sql = "INSERT INTO t_hoge (name) VALUES('hogesan')"; pg_exec($sql) と、テーブルにデータを入れているんですが、 エラーはでないのに何故かデータがテーブルにインサートできません。 また、アップデートで編集もできません。 しかし、SELECTで既に入力されているデータを読んでprint等で表示させると普通にデータは取れています。 また、telnet等で直接postgresに hoge=> INSERT INTO t_hoge (name) VALUES('hogesan'); と入力するとデータが挿入できます。 なにが問題なんでしょうか。 権限が問題なのでしょうか。 ちなみにテーブル作成するときは CREATE TABLE t_hoge ( name TEXT PRIMARY KEY, info TEXT ); としています。 なにか思い当たる節があれば助言していただきたいのですが。

    • ベストアンサー
    • PHP
  • 指定された趣味を持つメンバーがいるグループを抽出するSQL

    グループテーブル、メンバーテーブル、趣味テーブルの3つのテーブルがあります。 あるメンバーはあるグループに属しており、趣味を1つ持っています。 以下がそのSQLです。 CREATE TABLE groups ( g_id int primary key ); CREATE TABLE members ( m_id int primary key , g_id int , h_id int ); CREATE TABLE hobbies ( h_id int primary key, h_name text ); INSERT INTO groups VALUES ( 1 ); INSERT INTO groups VALUES ( 2 ); INSERT INTO groups VALUES ( 3 ); INSERT INTO members VALUES ( 1, 1, 1); INSERT INTO members VALUES ( 2, 1, 3); INSERT INTO members VALUES ( 3, 1, 4); INSERT INTO members VALUES ( 4, 1, 4); INSERT INTO members VALUES ( 5, 2, 1); INSERT INTO members VALUES ( 6, 2, 2); INSERT INTO members VALUES ( 7, 2, 3); INSERT INTO members VALUES ( 8, 3, 2); INSERT INTO members VALUES ( 9, 3, 3); INSERT INTO members VALUES ( 10, 3, 4); INSERT INTO hobbies VALUES ( 1, 'sports' ); INSERT INTO hobbies VALUES ( 2, 'music' ); INSERT INTO hobbies VALUES ( 3, 'book' ); INSERT INTO hobbies VALUES ( 4, 'drive' ); 指定された趣味を持つメンバーがいるグループを抽出するにはどうすればいいでしょうか? 例えば、「読書が趣味なメンバーとドライブが趣味なメンバーがいるグループは?」「グループ1とグループ3」のような感じです。 一応自分で考えてみたのが、以下ですが、これだと趣味の指定が増減すると大きくSQLが変わってしまいます。 もっといいやり方はないでしょうか? 私はPostgreSQL8を使ってますが、汎用的なSQLであれば、そっちの方がいいです。 SELECT distinct m.g_id FROM members m join hobbies h ON m.h_id = h.h_id where h.h_name = 'drive' INTERSECT SELECT distinct m.g_id FROM members m join hobbies h ON m.h_id = h.h_id where h.h_name = 'book';

  • PHPですが、エラーがでます。下記の問題があるよう

    なんですが、どこがいけないのでしょうか? $sql = "insert into menber(name,passward) values($_POST["name"]."','".$_POST["passward"].)";//SQL文の作成 ?> エラーはParse error: syntax error, unexpected '"', expecting T_STRING or T_VARIABLE or T_NUM_STRING in です。よろしくお願いいたします。