• ベストアンサー

配列の初歩2

めとろいと(@naktak)の回答

回答No.8

> まず t1テーブルをつくり > create table t1 (number int(10) ,number2 int(10)); > insert into t1 values(1,2); > insert into t1 values(3,4); ここで分かる事は以下の1点です。  ・「number」という名前を有して利用出来ているのはDB側であり、PHP側ではない。 > <? > 略 > $sql = "insert into t1 (number,number2) values (5,number)"; > mysql_db_query($db,$sql); > ?> ここで分かるのは以下の2点です。  ・PHP側では$sqlという変数に『ただの文字列』を設定している。  ・PHP側ではmysql_db_query()で$sql内の『ただの文字列』を渡す事により、   DB側へSQL文の発行を依頼している。 つまり、PHP側ではあくまでSQL文を『ただの文字列』として作って、その 『ただの文字列』をDB側へ送っているだけになります。 DB側では「number」という項目が解釈できるので、正常に動作します。 PHP側では『ただの文字列』である事を勘違いし、『ただの文字列』としてではなく 『PHPの機能』として直接DBの項目を利用しようとなどとすると、 先の回答にあるとおり、PHP側ではDB側の項目名なんて知ったこっちゃありませんし、 PHP側ではそんな定義や変数がないので、そんなのねーよ、となります。 一度PHPを介さないでDBだけで、コマンドプロンプトなどでDB操作をしてみれば分かると思いますが、 SQLを実行しようとしてキーボードから打っているのは『ただの文字列』なはずです。 キーボードの位置が、PHPを介した場合にはPHPになる、ただそれだけです。 > PHPで5という値を受け取った場合、その5という値と(1)、その > 5に対応する($bat=array(5=>6,6=>7,7=>8);の場合なら)6という値 > (2)、の2つの値をmysqlの既存テーブルに保存する方法が結局知りた > いのです。 $bat=array(5=>6,6=>7,7=>8); $num = 5; //PHPで5という値を受け取った、とする $sql = "insert into t1 values('" . $num . "','" . $bat[$num] . "')"; //number項目には$numの値が、number2項目には$bat[$num]の値が設定される $bat[$num]は、以下のように動作しています。  ・$bat[$num] は $bat[5] となり、 $bat[5] は 6 である。 つまり、$sqlの中身を見てみると、以下のようになります。 insert into t1 values('5','6') 仕事の関係で時間がない為ちょっと不親切な説明かもしれません・・・。

Scipio93
質問者

補足

わたしのような初心者に細かく解説いただき、本当にありがとうございました。DB側ではnumberの文字列はわかるが、'{$bat[number]}'でこられてもわからないということが、やっと理解できました。 そして、私のやりたいことですが、 $num = 5; $bat=array(5=>6,6=>7,7=>8); $sql = "insert into t1 values('" . $num . "','" . $bat[$num] . "')"; $res = mysql_db_query($db,$sql); でできました。ありがとうございます。 ただ、これでは、あまりに静的です。 $num = が5、6、7と変化し、レコードが3つ追加されるようにするにはどうしたらよいのでしょうか。 また上記で t = 5 $num = t; ではなぜエラーとなるのでしょうか。 再度ご教授の程、何卒よろしくお願いいたします。

関連するQ&A

  • 配列の初歩

    初めてのプログラミングのため、初歩的な質問で申し訳ございません。 PHP+MYSQLに挑戦していますが、 複数の値を配列(これがわかりません)を使って、レコードを増やすやり方がわかりません。 $area = 5; $area2 = 6; $sql = "insert into t1 (number,number2) values ('.$area.','.$area2.')"; $res = mysql_db_query($db,$sql); なら、レコードを増やすことができましたが、これを配列(5,6)を使ってやるにはどうしたらよいのでしょうか。何卒よろしくお願いします。

    • ベストアンサー
    • PHP
  • 配列データのMySQLへの登録

    下記の配列のデータをMySQLのデータベースに登録をしたいと思っています。 (参考)に記述しています内容で実行をしましたが、1つ目のデータしか登録がされず、 for文なども考え試行錯誤していましたが、うまく実行できない状況であります。 登録のための方法をご教授いただければと思います。よろしくお願いします。 array(3) { [0]=>"146-0082" [1]=>"東京都大田区" [2]=>"田中さん" array(3) { [0]=>"120-0015" [1]=>"東京都足立区" [2]=>"山田さん" -------------------- (参考) $sql = ('insert into table (number, adress, name) values (:number, :adress, :name)'); $stmt = $dbh->prepare($sql); $params = array( ":number" => $data[0], ":adress" => $data[1], ":name" => $data[2] );

    • ベストアンサー
    • 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
  • PHP+mySQLでのCSV→DB登録で文字化けします

    現在タブ区切りのCSVファイルをPHPで取り込み mySQLへINSERTするものを作ろうとしているのですが INSERTするモノに全角が入ると文字化けているせいか mysql_queryでFALSEが帰ってきてしまいます。 使用環境、コードを以下に書きます。 どこかおかしな点等ありましたらご教授お願い致します。 OS:windowsXP PHP:Ver5.2.6、default_charset UTF-8 mysql:Ver5.0.51a UTF-8 取り込みたいCSV:Shift_JIS,CRLF,タブ区切り コード(一部) while(!feof($fp)){ $buf = fgets($fp); $buf = mb_convert_encoding($buf, "UTF-8", "Shift_JIS"); $buf=str_replace('\r\n', '\n', $buf); $array = preg_split("/\t/", $buf); if($array[0] == "") { break; } else { //INSERT用に加工( $values = replaceValues($array); } $sql = "INSERT INTO table_name VALUES($values)"; $res = mysql_query($sql); if(!$res){ echo "登録に失敗しました。"; echo "sql:".$sql; mysql_close($conn); exit; } $cnt++; }

    • 締切済み
    • PHP
  • MySQLから取り出したものを3つに分ける

    MySQLに以下のようなSQLを打ちました。 create table table_list( id int, task varchar(255) ); insert into table_list values(1,'ほげほげ1-1'); insert into table_list values(1,'ほげほげ1-2'); insert into table_list values(2,'ほげほげ2-1); insert into table_list values(2,'ほげほげ2-2'); insert into table_list values(3,'ほげほげ3-1'); そして、空のdiv要素が3つあります。 このデータベースからidの数値別に、div要素へtaskの文字列を入れたいのですが、どうすればいいのでしょうか? SQLで「select * from table_list」をやってからtaskを取り出すのか、3回SQLで「select task from table_list where id=1」のようにするのがよろしいんでしょうか?

    • ベストアンサー
    • PHP
  • 配列データのレコード登録

    はじめましてphp初心者ですが、ここ一ヵ月ほど悩みに悩んだのですが、答えがわかりませんので教えてください。初歩的なことだとは思うのですが、配列データのレコード登録方法がわかりません。 例えば、$a = array("あ","い","う","え","お"); とした場合に$aをレコードに追加するにはどうすればいいんでしょうか? そのまま、$sql = "INSERT INTO (`test`) VALUES ('{$a}')"; とやってもarrayとなってしまいます。やりたいのは個別レコードにしての登録です。 1,あ 2.い 3.う …というような。 どうか宜しくお願い致します。

    • 締切済み
    • PHP
  • トランザクションについて教えてください

    PHPとMysqlを利用しています。MySQL4.1.18です。 同じテーブルに2つ以上の値をINSERTする場合、 1つでもエラーがあればロールバックさせるということはできますでしょうか。 あらかじめ「id=1」の値を登録しておき、この場合1つめがエラーになるので 2つめも実行されないでほしいのですが、実行されてしまいます。 テーブルのタイプはInnoDBにしています。 どうぞよろしくお願いします。 以下を参考に作成しました。 http://oshiete.nikkeibp.co.jp/qa3065237.html $sql = "begin"; $rst = mysql_query($sql, $con); //1つめ $sql= "INSERT INTO T_test(id,name)values('1','山田')"; $rst = mysql_query($sql, $con); if(!$rst){$err="err";} //2つめ $sql= "INSERT INTO T_test(id,name)values('2','鈴木')"; $rst = mysql_query($sql, $con); if(!$rst){$err="err";} $sql = "commit"; $rst = mysql_query($sql, $con); if($err){ $sql = "rollback"; $rst = mysql_query($sql, $con); }

    • ベストアンサー
    • MySQL
  • トランザクションについて

    トランザクションについての質問なのですが、下にある1のSQLを実行すると 'a'だけ登録されるのは、分かるのですが、 2のSQLを実行すると、'c'と'd'の両方が登録されてしまいます。 私的には、両方登録されないのかなぁと思っていたのですが・・・ COMMITが来た時点で、START TRANSACTIONの開始位置は、 あまり関係ないということなのでしょうか? よろしくお願いします。 1. START TRANSACTION; insert into test values('a'); START TRANSACTION; insert into mtuser values('b'); ROLLBACK; COMMIT; 2. START TRANSACTION; insert into test values('c'); START TRANSACTION; insert into mtuser values('d'); COMMIT; ROLLBACK; 環境:Mysql4.1.19

    • ベストアンサー
    • MySQL
  • 別テーブルからselectした値を他のテーブルにinsertしたいのですが、上手くできません

    以下のように行ったのですが、 全ての値が別テーブルにinsertされません。 $sql = "SELECT tbl_A.id, tbl_A.data FROM tbl_A "; $rst = mysql_query( $sql ); while ( $col = mysql_fetch_array( $rst ) ) { $sql = "INSERT INTO tbl_B (          date, id, data ) VALUES ( '" . date( 'Y-m-d' ) . "', '" . mysql_real_escape_string( $col['id'] ) . "', '" . mysql_real_escape_string( $col['data'] ) . "' )"; } このやり方では、テーブル内の1つの値しかinsertされません。 selectされた全ての値をinsertするにはどのようにしたら良いのでしょうか? よろしくお願いします。 DB:mysql5 SP:php5

    • ベストアンサー
    • MySQL
  • 配列をmysqlに保存

    チェックボックスで複数選択されたチェックボックスの値を配列としてmysqlに保存したいのですがどうも上手くいきません。いろいろweb上で探してみましたが、serialize/unserialize関数?を使うのでしょうか?ちなみに抽出も上手くいきません。どなたか教えていただけませんか?宜しくお願いします。以下スクリプトの一部です。 //配列 <input type='checkbox' name='op[]' value='ac'>ac <input type='checkbox' name='op[]' value='pw'>pw <input type='checkbox' name='op[]' value='cd'>cd //データベースに登録 $sql="insert into test (test) values (\"$op\")"; mysql_query($sql,$con); //データベースから配列として抽出 $sql = "select * from op"; $rst = mysql_query($sql,$con); $col = mysql_fetch_array($rst); $op = $col[op];

    • ベストアンサー
    • PHP