• 締切済み

データ検索について

現在フォームに入力された日付を検索して、その値に紐付くデータを 表示させるといった、検索システムを作成しています。 しかしフォームの値が上手く渡りません。 現在の症状としては フォームの値 2008-01-01 × フォームの値 "2008-01-01" ○ 上記の様に値をダブルクォーテンションで囲むと上手く渡るのですが、 囲まないと上手く渡りません。 なぜこのような動作になってしまうのか分からず、解決できません・・・ この解決策をご教授頂けると幸いです。 開発環境は UI Flex DB接続 AMF PHP DB MYSQL 日付のフォーマットはyyyy-mm-dd dateフィールドの値はtext 以下がソースになります。 ************************************************************* //$date フォームの値 function SearchData($date = "") { GLOBAL $dbh; //DB接続 if($date) { $sql = " SELECT * FROM tDate WHERE date = \"".$date."\""; } else { $sql = " SELECT * FROM tDate"; } $result = mysql_query( $sql ); while( $val = mysql_fetch_assoc( $result ) ) { $res_list[] = array( "date" => $val['date'], ); } return $res_list; } ************************************************************* 以上よろしくお願い致します。

みんなの回答

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

>dateフィールドの値はtext 日付のフィールドにtext型をつけるのは問題外でしょう。 せめてvarchar(char)型にして、普通はdate型で処理します。 そうでなければSQLの性能を発揮するのは難しいでしょう。 おそらく、登録されているデータも無駄なクォーテーションがついて いるのではないでしょうか? それとまずは予約語を使わないってとこから始めましょう。 dateというフィールドはまずいですね。 もしどうしてもdateという名前にしたいなら `date`とバッククォーテーションでくくります。 また $sql = " SELECT * FROM tDate WHERE date = \"".$date."\""; SQLの書き方に工夫が必要かも。 SQLでミスをなくすにはクォーテーションにはシングルクォーテーション をつかうことです。 そうすればPHPでよくつかうダブルクォーテーションと競合せず 無駄なエスケープがへります。 (逆よりは汎用性があがるでしょう)

gardens64
質問者

お礼

ご回答ありがとうございます。 ご教授通りテーブル設計・SQL内のシングルクォーテーション 等試してみましたが、未だに同様の現象が発生してしまいます・・・

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • データ検索

    PHPからMYSQLのデータを検索するごくごく簡単なプログラムを作ってみようと思いました。 どうやらデーターベースにアクセスしていないような・・・・・??? 初心者です。申し訳ありませんがよろしくお願い致します。 <? $db = mysql_connect(); mysql_select_db('suzu'); //前画面からのパラメータ $ab = $_POST["Memb"]; //一致データ検索 $sql = " select * from Toshokan \n " . " where to_menb = '$ab' " ; $res = mysql_db_query($db,$sql); $arycol = mysql_fetch_array($res,MYSQL_ASSOC); print ("$ab"); print ("###"); print ($res["to_menb"]); print ("***"); print ("$FMemb"); print ("###"); print ($arycol['to_post1']); if ( $res == $FALSE ) { die("新規登録"); } else { die("更新"); } mysql_free_result ($res); mysql_close($db); ?> 結果 上記の print ($res["to_menb"]); print ($arycol['to_post1']); は出力されずにダミー状態です。 データーベースにアクセスされていないと考えたのですが、、、、、 どなたかご教授いただければ幸いです。

    • ベストアンサー
    • PHP
  • 関数(list)の戻り値を他の関数(base)の引数に渡したいんですが

    関数(list)の戻り値を他の関数(base)の引数に渡したいんですが、どうすればいいでしょうか? /****list.php****/ <?php function list($id){ // DB接続 open(); $sql = "SELECT * FROM table WHERE id = $id"; $result = mysql_query($sql); // 実行結果判定 if(!$result){ $res = 9; }else{ while ($row = mysql_fetch_assoc($result)){ $moji .= $row['name']; $moji .= $row['mail']; } echo $moji; $res = 0; } return $res; } ?> /****main.php****/ <?php ・ ・ list($id); ・ ↓$err_cdにlistの戻り値を入れ、$err_msgには戻り値が0なら「正常終了」,9なら「SQLエラー」などを入れるようにしたい。 base($err_cd,$err_msg); ・ ?>

    • ベストアンサー
    • PHP
  • 日付型のデータを検索条件

    DATE型でINSERTした日付データが検索条件として効きません。 検索フォームに入力した日付に関係なく全てのレコードが出てしまいます。 以下、原因につきご教示いだけると幸いです、 ◆検索フォームは、以下の通りです。 <html><body> <form method="post" action="list.php"> <input type="text" name="date_more">以降 <input type="text" name="date_less">以前 </form> </body></html> ◆PHPは、日付欄に2005-06-01のように値が入力された場合のみ SQLに追加するようにしています。 //試験日 (値が入力されている場合のみSQL文に追加) if (strlen($date_more) > 0) { $sql .= " and (testdate >= $date_more)"; } if (strlen($testdate_less) > 0) { $sql .= " and (testdate <= $date_less)"; } ◆ $sqlをprintすると select * from mytable where (memo like '%%') and (testdate >= 2005-06-01) のように、SQL文はきちんと発行されているように思います。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • sqlから多次元配列に要素を格納するコードの書き方

    現在sqlから読み込んだ要素をentries配列に格納しようと考えているのですが、 次のように書いてしまうと長く、複雑になってしまいます。 $res_result = mysql_query( "SELECT * from {$entry_title}", $link ); while( $entry_title = mysql_fetch_assoc( $res_result ) ){}; $res_result = mysql_query( "SELECT * from {$entry_url}", $link ); while( $entry_url = mysql_fetch_assoc( $res_result ) ){}; $res_result = mysql_query( "SELECT * from {$unix_time}", $link ); while( $unix_time = mysql_fetch_assoc( $res_result ) ){}; $res_result = mysql_query( "SELECT * from {$entry_count}", $link ); while( $entry_count = mysql_fetch_assoc( $res_result ) ){}; $entries[$i++] = array( "entry_title" => $entry_title, "entry_url" => $entry_url, "unix_time" => $unix_time, "entry_count" => $entry_count, ); もっと簡潔に書く方法はないでしょうか。 どなたかご教示のほど、どうかよろしくお願いします。

    • ベストアンサー
    • PHP
  • MYSQLとの連動のselect文で

    $dbh = @mysql_connect( $host , $id , $pw ); mysql_select_db( $id , $dbh ); mysql_query( "SET NAMES UJIS" ); $str = "select * from login_data where sid = '$sid' and spass = '$spass'";   $result = mysql_query( $str ); $rec = mysql_fetch_array( $result ); 上記のようにDBに登録されているidとpassの一致した情報を取り出したいのですが、「$result」が何を入れてもfalseになってしまいます。 「$str」をprintで出力したものを直接phpmyadminのSQLに流し込むと普通に情報を取ってこれるのですが、プログラムのmysql_query()がうまく動きません。 どなたかお分かりになる方いましたら是非教えていただけませんでしょうか。 よろしくお願い致します。

    • 締切済み
    • PHP
  • 結果セットは明示的に開放しない限り、保証されるのでしょうか?

    PHP5からMySQL5を使っています。 mysql_queryの戻り値であるリソースの変数名を別にすれば、 結果セットは明示的に開放しない限り、保証されるのでしょうか? 例) テーブルA FLD1, FLD2 ------------ a 1 b 2 c 3 $link=mysql_connect(ホスト, ユーザ, パスワード); mysql_select_db(データベース名); $sql = "select * from A"; $res = mysql_query($sql); while ( $row = mysql_fetch_array($res) ) { $fld1 = $row["FLD1"]; // 以下、極端な無駄な例ですが・・・ // リソース変数名を$resと$res2を分けているので、 // $resで回っている結果セットは保証されるのでしょうか? // 明示的にmysql_free_result($res);を呼び出さない限り // $resは mysql_queryなどで同じ$resで上書きしない限り // 生き残っているのでしょうか? $sql2 = "select * from A where FLD1='$fld1'"; $res2 = mysql_query($sql2); if ( $row2 = mysql_fetch_array($res2) ) { print "FLD2=".$row2["FLD2"]; } } // 最後に mysql_free_result($res); mysql_free_result($res2); mysql_close($link); 以上です。

    • ベストアンサー
    • PHP
  • PHPでMySQLのデータを検索したい

    お世話になります。 PHPでMySQLのデータを検索したいと思い、 以下のようにしてみたのですがうまく表示されません。 -- $name = $_POST["name"]; $link = mysql_connect('localhost', '', ''); $db_selected = mysql_select_db('', $link); mysql_set_charset('utf8'); $sql = "SELECT * FROM search WHERE". $name; $result = mysql_query($sql); while($row = mysql_fetch_array($name)) { print $row['name']; } $close_flag = mysql_close($link); -- どう改善すればいいのでしょうか? 初心者の為、少々お見苦しい点があるかと思いますが どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • PDOでの検索システムについて

    プログラミング初学者です。 過去に検索システムを作る時にmysqlを使っていましたが、今回PDOを使った簡単な検索の仕組みを作ってみています。 実際に動作確認してみると検索結果で何もでず、var_dumpで確認してみるとNULLとなってしまいます。 いろいろ調べているのですが、PDOを使った場合の検索条件の部分の書き方がイマイチよくわかりません。 そしてだんだん深みにはまって迷走してしまっています。。。 アドバイスをいただけないでしょうか。 【検索フォーム(search.php)】 <form name="" method="POST" action="result.php"> <button type="submit" name="area" value="新宿">新宿</button> </form> 【検索結果(result.php)】 define('DB_HOST', 'localhost'); define('DB_USER', 'ユーザー名'); define('DB_PASSWORD', 'DBパスワード'); define('DB_NAME', 'DB名'); try { $dbh = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USER,DB_PASSWORD); } catch (PDOException $e) { echo $e->getMessage(); exit; } $sql= "select * from shop where area='" . $_POST["area"] . "' "; $shop = array(); foreach ($dbh->query($sql) as $row) { array_push($shop, $row); } ?> <body> <?php foreach ($salon as $row) : ?> <?php echo htmlspecialchars($row['area'],ENT_QUOTES,'UTF-8'); ?> <?php echo htmlspecialchars($row['name'],ENT_QUOTES,'UTF-8'); ?> <?php echo htmlspecialchars($row['station'],ENT_QUOTES,'UTF-8'); ?> <?php endforeach; ?> </body> </html> ※ $sql= "select * from shop where area='" . $_POST["area"] . "' "; の部分に原因があるのかと私は考えています。 $sql= "select * from shop; とした場合は全件表示されるからです。 見難いコードで申し訳ありませんが、アドバイス頂ければ幸いです。

    • ベストアンサー
    • PHP
  • php 多重ループでエラー

    データベースからレコードの値を取得時に、 以下のエラーが発生します。 2度目のexecute()でなぜエラーが発生するのでしょうか? Fatal error: Call to a member function execute() on a non-object <? try {  $dbh = new PDO("mysql" . ":host=localhost" . ";" . "dbname=" . "test", "user", "password");  if (!$dbh)  {   $info = $dbh->errorInfo();   exit($info[2]);  } } catch (PDOException $e) {  exit('データベースに接続できませんでした。' . $e->getMessage()); } $sql = "SELECT * FROM Master"; $result = $dbh->prepare($sql); $result->execute(); while ($rs = $result->fetch(PDO::FETCH_ASSOC)) {  $sql = "SELECT * FROM MasteSub";  $sql = $sql . " Where ID = {$rs['ID']";  $result2 = $dbh->prepare($sql);  $result2->execute(); //ここでエラー発生  if ($rs2 = $result2->fetch(PDO::FETCH_ASSOC))  {   $Name = $rs["Name"];  }  $rs2 = null;  $result2 = null; } $rs = null; $result = null; 開発環境 OS:CentOS5 PHP:5.1.6 データベース:MYSQL

    • ベストアンサー
    • PHP
  • php5+Mysql5による条件検索とその表示方法が上手く動作しないのでどなたかご指摘をお願いします。

    phpにて条件検索を行っているのですが、『where』以下を$変数にすると動かなくなってしまいます。記述部分で何が間違っているのでしょうか? 以下記述↓ <? $link = db_con(); //←DB接続 $sql = "select * from tbl where id = '" . mysql_real_escape_string( $_GET['id'] ) . "' and name like '%" . mysql_real_escape_string( $_GET['name'] ) . "%' "; $result = mysql_query( $sql ) ; $num_rows = mysql_num_rows( $result ); ?> ここまで↑ を下記のように『where』以下を$変数にして代入 $変数した場合↓ <? $where .= "id = '" . mysql_real_escape_string( $_GET['id'] ) . "' and name like '%" . mysql_real_escape_string( $_GET['name'] ) . "%' "; $link = db_con(); //←DB接続 $sql = "select * from tbl where $where "; $result = mysql_query( $sql ) ; $num_rows = mysql_num_rows( $result ); ?> ここまで↑ どなたかご指摘をお願いします。