0

私はいくつかのPHPコードを持っています:

$categories = mysql_query("SELECT category_id, category_name AS categories FROM categories");

while ($row = mysql_fetch_assoc($categories)){
        $columnvalues[] = $row['categories'];
}

$catlist = $columnvalues[0];

$catchq = mysql_query("SELECT message AS message FROM box WHERE LOWER(message) LIKE '".$catlist."'");
$catchr = mysql_fetch_array($catchq);
$catchx = $catchr['message'];
echo $catchx."\n";

上記のコードは意図したとおりに機能しますが、[0] の一致と、メッセージに [0] のカテゴリの名前が含まれている場合のみです。私が達成しようとしているのは、最初のクエリで見つかった 4 つのカテゴリのいずれかを 2 番目のクエリで検索することです。

[1]、[2]、[3] に対してもどのように一致させますか? OR 演算子を試しましたが、思うように動作しません (例: $catlist = $columnvalues[0] or $columnvalues[1];)

4

2 に答える 2

3

ループするだけです$columnvalues

$query = "SELECT message AS message FROM box WHERE LOWER(message)"
foreach ($columnvalues as $key => $value) {
    if ($key) {
        $query .= " OR ";
    }
    $query .= " LIKE '%$value%' ";
}
$catchq = mysql_query($query);

あなたのコードはインジェクションに対して脆弱です。PDO または mysqli で適切にパラメータ化されたクエリを使用する必要があります。

于 2013-05-14T19:23:34.643 に答える
0

MySQL は推奨されていないため、まず MySQLi を使用します。これはあなたがやりたいことをすることができます:

$mysqli = new mysqli($dbhost, $dbuname, $dbpass, $dbname);
if ($mysqli->connect_error) {
    die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}
$categories = $mysqli->query("SELECT `category_id`, `category_name` AS `categories` FROM `categories`");

while ($row = $categories->fetch_array(MYSQLI_BOTH)){
        $columnvalues[] = $row['categories'];
}

$stmt = $mysqli->prepare("SELECT `message` FROM `box` WHERE LOWER(`message`) LIKE ?"); 
foreach($columnvalues as $value){
        $stmt->bind_param("s", $value);
        $stmt->execute();
        $stmt->bind_result($message);
        $stmt->fetch();
        printf("%s: %s<br>", $value, $message);
}
$stmt->close();
于 2013-05-14T19:32:27.830 に答える