php、クエリ生成について
OS:Mac OS X 10.6.8 Snow Leopard
環境:MAMPを使ったローカル環境
PHP:5.3.6
MySQL:5.5.9
PHPとMYyQLを使って検索システムを作ってみている者です。
検索結果がどうしても全件表示になってしまいます。
また、$queryにはSELECT * FROM テーブル名 にwhereで条件を付加してるのですが、
$queryをprintしてみても、SELECT * FROM テーブル名 しか表示されません。
いろいろ調べたり試したりしてみたのですが、原因がつかめず、解決策が見つかりません。
どうか、アドバイスご教示お願いします。
<body>
<?php
$debug = false;
//DB Connect
$url = "localhost";
$user = "ユーザー名";
$pass = "パスワード";
$db = "DB名";
$link = mysql_connect($url,$user,$pass) or die("No Connected");
$sdb = mysql_select_db($db,$link) or die("No Connected");
if($debug) echo_r($HTTP_POST_VARS);
//Error Check
//Request Method Check
if($_SERVER["REQUEST_METHOD"] != "POST") {
echo "Error: invalid method";
exit();
}
//Create Query
$query = "SELECT * FROM テーブル名";
//Create Search Criteria
$where = array();
if (isset($_POST['type'])and($_POST['type'] !== '')) {
$where[] = sprintf("(type='%s')", mysql_real_escape_string($_POST['type']));
}
if (isset($_POST['name'])and($_POST['name'] !== '')) {
$where[] = sprintf("(name='%s')", mysql_real_escape_string($_POST['name']));
}
if (isset($_POST['address'])and($_POST['address'] !== '')) {
$where[] = sprintf("(address like '%%%s%%')", mysql_real_escape_string($_POST['address']));
}
if (isset($_POST['description'])and($_POST['description'] !== '')) {
$where[] = sprintf("(description like '%%%s%%')", mysql_real_escape_string($_POST['description']));
}
if (count($where) <> 0) {
$query .= ' where ' . implode(' and ', $where);
}
echo $query;
//Result
$result = mysql_query($query) or die($query . '<br />' . mysql_error() . '<hr />');
$num_rows = mysql_num_rows($result);
?>
<h2>Search Result</h2><br>
<?php
if($num_rows == 0) {
$message = "No date";
} else {
$message = $num_rows ."hits";
echo $message;
}
?>
<table>
<tr>
<td>Type</td>
<td>Company</td>
<td>Address</td>
<td>Description of Business</td>
</tr>
<?php while($row = mysql_fetch_assoc($result)): ?>
<tr>
<td><?php echo $row['type']; ?></td>
<td><?php echo $row['name']; ?></td>
<td><?php echo $row['address']; ?></td>
<td><?php echo $row['description']; ?></td>
</tr>
<?php endwhile; ?>
</table>
</body>
お礼
お返事ありがとうございます。 なるほど。。。配列にしてしまってまとめるのですか。