プロが教えるわが家の防犯対策術!

混乱しています。助けてください。
mysqlはもう古いよ・・・ということで、PDOに書き換えています。

select文に$や%は使わない方がいいとのことでしたが、次のコードはどうかきかえればいいのでしょうか?

<?php
//値をうけとる
$a=$_POST['a'];
$b=$_POST['b'];
$c=$_POST['c'];
//WHERE以下の文章
$check="";                        //←ここです 
if(isset($a)){$check=$check."and menu like '%りんご%' ";}
if(isset($b)){$check=$check."and menu like '%みかん%' ";}
if(isset($c)){$check=$check."and menu like '%ばなな%' ";}

if(empty($check)){
$meirei="SELECT * FROM shop";
}else{
$check = substr($check, 4);
$meirei="SELECT * FROM shop WHERE $check;";         //←ここです
}

?>

今回初めてPDOを使いはじめたので、本当に初心者です。
いろんなサイトをよんでみたもののだんだん悲しくなってくるほどわかりません。
よろしくお願いします。

質問者からの補足コメント

  • ありがとうございます!
    PDO たすかりました!!

    コメントアウトされたコードのすぐ下の
    $meireiに$checkがあってもいいのですか?

    $checkの中に、likeや%が含まれているので使えないかと思い、どのように条件だしをすればよいのかなやんでいました。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/01/27 01:45

A 回答 (2件)

文脈からあまりわからないのですが、結果的にPDOを使いたいのですか?


サンプル
//値をうけとる
$a=$_POST['a'];
$b=$_POST['b'];
$c=$_POST['c'];
//WHERE以下の文章
$check="";
if(isset($a)){$check="and menu like '%りんご%' ";}
if(isset($b)){$check="and menu like '%みかん%' ";}
if(isset($c)){$check="and menu like '%ばなな%' ";}

if(empty($check)){
$meirei="SELECT * FROM shop";
}else{
//$check = substr($check, 4); //ここはあまり理解できなかったのでコメントアウトします。
$meirei="SELECT * FROM shop WHERE ".$check;
}
try{
//dsn変数 hostはサーバ dbnameはデータベース名 charsetは文字コード
$dsn = "mysql:host=localhost;dbname=sample;charset=utf8";
//データベースのユーザー名
$user = "root";
//データベースのパスワード
$password = "sample";
$pdo = new PDO($dsn,$user,$password);
$stmt = $pdo -> query($meirei);
while($row = $stmt -> fetch(PDO::FETCH_ASSOC)){
echo $row['情報の取り出したいカラム名'];
}
} catch (PDOException $e) {
exit('ERROR : '.$e->getMessage());
}
ということですか?
この回答への補足あり
    • good
    • 0

phpでは、変数の最初に$を付けますので、別に文字列として使っているわけではないです。

あとsqlのlike文では、あいまい検索なので%は使えます。
likeの説明は、ネットで調べた方がいいと思います。
    • good
    • 0
この回答へのお礼

ありがとうございました!
文字列やクラスについて勉強します。
ずっと疑問だったことが解消されて嬉しいです

お礼日時:2017/01/27 08:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!