こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PHP&MySQLのエラー(syntax)への対処

PHPとMySQLを使った検索プログラムを作ってみているのですが、実際に動かしてみると、検索結果表示画面に以下のようなエラーがでます。

SELECT * FROM (テーブル名) where
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

いろいろとPHPに関するサイトやQ&Aを見て考えてみたのですが、解決策がわかりません。
アドバイス、ご指摘の程お願い戴けないでしょうか。

以下が検索結果表示のコードになります。

<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);
}

//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>

解決策をご指導よろしくお願い申し上げます。

投稿日時 - 2012-06-18 15:16:28

QNo.7540695

すぐに回答ほしいです

質問者が選んだベストアンサー

if (count($where <> 0)) {
$query .= ' where ' . implode('and', $where);
}

if (count($where) <> 0) {
$query .= ' where ' . implode('and', $where);
}
が正しいですね。
これが原因ではないでしょうか。

エラーメッセージではSQL文の構文エラーだと言ってますので、クエリーを実行する前に$queryの中身をダンプしてみて、自分で想定したSQL文になっているのか確認しましょう。

投稿日時 - 2012-06-18 15:55:55

補足

見落としていました。

ご指摘有難うございます。

もう一点アドバイスいただきたい点が浮上しました。
お二方のご回答にて修正を加えることで検索結果が表示されるようになったのですが、どうしても全件表示されてしまいます。

検索条件を生成する部分のコードで何かお気づきの点がありましたら、ご教示戴けないでしょうか。

検索条件としては、
typeが、ラジオボタンで選択したアイテムと完全一致するように。
nameが、文字列検索とnameに記入した文字列と完全一致するように。
addressが、ラジオボタンで選択したアイテムと住所が部分一致するように。
descriptionが、テキスト内容と検索文字列が部分一致するように。

になるように書いているつもりです。

投稿日時 - 2012-06-18 16:14:59

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

$result = mysql_query($query) or die($query . '<br />' . mysql_error() . '<hr />');

echo $query;
$result = mysql_query($query) or die($query . '<br />' . mysql_error() . '<hr />');

こうやって自分で確認してください。他人にやってもらうことじゃないです。

投稿日時 - 2012-06-18 16:37:17

$query .= ' where ' . implode('and', $where);

$query .= ' where ' . implode(' and ', $where);

投稿日時 - 2012-06-18 15:55:19

補足

見落としていました。

ご指摘有難うございます。

投稿日時 - 2012-06-18 16:07:14

あなたにオススメの質問