分からないことは例えば「山田 太郎」で検索すればヒットするのですがこれが「太郎 山田」だと検索しても0件になります。そして例えば「080」で検索すればヒットするのですがこれが「山田 080」だとヒットしません。こちらの方もAND検索できればいいなと思っています。
試したことはコードにある「$statement = $dbh->prepare("SELECT * FROM hito WHERE name LIKE (:name) or tel LIKE (:tel) ");」のorの部分をandにしましたがandにすると0件となり表示されません。orにすると名前だけ、番号だけはヒットするようになりました。
勉強不足ゆえまだ知らないことだらけかもしれませんがどうぞよろしくお願い致します。
<?php
header("Content-type: text/html; charset=utf-8");
if(empty($_POST)) {
header("Location: search1.html");
exit();
}else{
//名前入力判定
if (!isset($_POST['yourname']) || $_POST['yourname'] === "" ){
$errors['name'] = "名前が入力されていません。";
}
}
if(count($errors) === 0){
$dsn = 'mysql:host=****;dbname=****;charset=utf8';
$user = '****';
$password = '****';
try{
$dbh = new PDO($dsn, $user, $password);
$statement = $dbh->prepare("SELECT * FROM hito WHERE name LIKE (:name) or tel LIKE (:tel) ");
if($statement){
$yourname = $_POST['yourname'];
$like_yourname = "%".$yourname."%";
//プレースホルダへ実際の値を設定する
$statement->bindValue(':name', $like_yourname, PDO::PARAM_STR);
$statement->bindValue(':tel', $like_yourname, PDO::PARAM_STR);
if($statement->execute()){
//レコード件数取得
$row_count = $statement->rowCount();
while($row = $statement->fetch()){
$rows[] = $row;
}
}else{
$errors['error'] = "検索失敗しました。";
}
//データベース接続切断
$dbh = null;
}
}catch (PDOException $e){
print('Error:'.$e->getMessage());
$errors['error'] = "データベース接続失敗しました。";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>検索結果</title>
<meta charset="utf-8">
</head>
<body>
<?php if (count($errors) === 0): ?>
<p><?=htmlspecialchars($yourname, ENT_QUOTES, 'UTF-8')."で検索しました。"?></p>
<p><?=$row_count?>件です。</p>
<table border='1'>
<tr><td>名前</td><td>性別</td></tr>
<?php
foreach((array)$rows as $row){
?>
<tr>
<td><?=$row['name']?></td>
<td><?=htmlspecialchars($row['tel'],ENT_QUOTES,'UTF-8')?></td>
</tr>
<?php
}
?>
<?php elseif(count($errors) > 0): ?>
<?php
foreach($errors as $value){
echo "<p>".$value."</p>";
}
?>
<?php endif; ?>
</body>
</html>