-2

以下のコードは機能するようになりましたが、結果が見つからない場合は空白ではなくメッセージをエコーするようにするにはどうすればよいですか。

データベースの検索クエリを作成できたと思います。非常に基本的な検索にすぎませんが、何らかの理由で機能していないようです。まだpdoを初めて使用するので、アドバイスをいただければ幸いです(非常に新しいです!親切にしてください!)。

また、ユーザーが送信したデータはデータベースに挿入されないため、SQL が自由に挿入されると仮定して xss を除外できると思いますか? 私が理解していることから、PDOはどれですか? さらに、書き込みアクセス権のないスタンドアロン DB ユーザーを使用しています。

セキュリティのため、データを xxx に置き換えてください

ファイルはsearch.phpと呼ばれます

*提案された変更を反映するように更新 *提供されたヘルプを反映する 2 回目の更新 *3 回目の更新

   <html>
<head>
</head>
<body>
<form name="frmSearch" method="post" action="search.php">
  <table width="599" border="1">
    <tr>
      <th>Keyword
      <input name="var1" type="text" id="var1">
      <input type="submit" value="Search"></th>
    </tr>
  </table>
</form>
<?php
$nameofdb = 'xxxxxx';
$dbusername = 'xxxxxxxxxxxxxx';
$dbpassword = 'xxxxxxxxxxxxx';



// Connect to MySQL via PDO
try {
$dbh = new PDO("mysql:dbname=$nameofdb;host=localhost", $dbusername, $dbpassword);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}

$var1 = str_replace(array('%','_'),'',$_POST['var1']);
if (!$var1)
{
    exit('Invalid form value: '.$var1);
}


$query = "SELECT * FROM xxxxx WHERE xxxxxx LIKE :search OR xxxxx LIKE :search";
$stmt = $dbh->prepare($query);
$stmt->bindValue(':search', '%' . $var1 . '%', PDO::PARAM_INT);
$stmt->execute();

/* Fetch all of the remaining rows in the result set */
print("Fetch all of the remaining rows in the result set:\n");


 $result = $stmt->fetchAll();

foreach( $result as $row ) {
    echo $row["id"];
    echo $row["title"];
}




?>

</body>
</html>
4

3 に答える 3

-1

私はこの方法を書き、それに取り組んでいるすべてのプロジェクトで使用しています。それを試してみてください :)

public function searchForQueryString($queryString)
{
    $query = "SELECT * FROM `xxxx` WHERE (`xxxxxxx` like :queryString or `xxxxx` like :queryString) ";

    $sth = $this->prepare($query);
    $queryString = '%' . $queryString . '%';
    $sth->bindParam('queryString', $queryString, PDO::PARAM_STR);

    $sth->execute();

    $result = $sth->fetchAll(PDO::FETCH_OBJ);

    if(empty($result) or $result == false)
       return array();
    else
        return $result;
}
于 2013-07-16T11:09:22.497 に答える