-2

これを機能させようとしていますが、SQLが正しくセットアップされているとは思いません。

たとえば、URL から検索語を取得し、データベースで安全に使用できるように、準備されたステートメントを使用して挿入しようとしています。

まず、セッションから所有している製品のユーザー ID を呼び出します。

次に、複数の項目があるかどうかを確認し、配列をセットアップしてデータベースに挿入する場合は、複数の項目がない場合は、単にデータベースに挿入してデータを取得します。

変数に設定している理由は、ページネーション クラスに送信され、結果をページ付けするためです。

html のヘッダーは次のとおりです。

<?php

$searchword = $urlmaker->geturlandsearch($_GET["search"]);

$findcomma = strpos($_SESSION["SESS_USERSPRODUCTIDS"], ",");

if($findcomma == true){

    $userproductid = explode(',', $_SESSION["SESS_USERSPRODUCTIDS"]);
    $prep       = array(':like' => "%$searchword%", ':like2' => "%$searchword%");

    $q = '';
    $e = '';
    $i = 1;

    foreach($userproductid as $productid){

        $q   .= 'productid=:productid' . $i . ' || ';
        $prep[":productid{$i}"] = $productid;
        $i++;

    }

    $q = rtrim($q, " || ");

} else {

    $q = 'productid=:productid';
    $prep = array(':productid' => $_SESSION["SESS_USERSPRODUCTIDS"], ':like' => "%$searchword%", ':like2' => "%$searchword%");

}

$maxlimit = 15;

$geturi = "/Search-Forum/" . $_GET['search'] . "/";

$string     = "SELECT id,title,date,username,viewcount,replycount,replyuser,replydate FROM forum_topics WHERE " . $q . " AND title LIKE :like OR content like :like2 ORDER BY replydate DESC";
$pagstring  = "SELECT id FROM forum_topics WHERE  " . $q . " AND title LIKE :like OR content like :like2";
$pagurl     = $geturi;

フロントエンドのコードは次のとおりです。

<?php

$topicQuery = $pagination->paginatedQuery($pdo, $string, $maxlimit, $prep);
if($topicQuery != "no query"){

while($fetchquery = $topicQuery->fetch()) { 
$topicid            = stripslashes($fetchquery["id"]);
$topictitle         = stripslashes($fetchquery["title"]);
$topicdate          = stripslashes($fetchquery["date"]);
$topicusername      = stripslashes($fetchquery["username"]);
$topicviewcount     = stripslashes($fetchquery["viewcount"]);
$topicreplycount    = stripslashes($fetchquery["replycount"]);
$topicreplyuser     = stripslashes($fetchquery["replyuser"]);
$topicreplydate     = stripslashes($fetchquery["replydate"]);

?>
<li>
    <div class="topiclisttitle"><p><b><a href="<?php echo '/Forum-'.$_GET["forumid"].'/Product-'.$_GET["productid"].'/' . $urlmaker->sluggify($topictitle); ?>/<?php echo $topicid ; ?>/<?php echo $_GET["proid"]; ?>/"><?php echo ucwords($topictitle); ?></a></b><br><?php echo $topicusername ; ?> on <?php echo $betterTime->dateAndtime($topicdate); ?></p></div>
    <div class="topiclistview"><p><b><?php echo $topicviewcount ; ?></b><br>Views</p></div>
    <div class="topiclistview"><p><b><?php echo $topicreplycount ; ?></b><br>Replies</p></div>
    <div class="topiclistlastposted"><?php if(!empty($topicreplyuser)){ ?><p>By: <b><?php echo $topicreplyuser ; ?></b> On<br><?php echo $betterTime->dateAndtime($topicreplydate); ?></p><?php } else { ?><p>By: <b><?php echo $topicusername ; ?></b> On<br><?php echo $betterTime->dateAndtime($topicreplydate); ?></p><?php } ?></div>
</li>
<?php } } else { ?>
<li><p class="morepadding">No Topics Regarding Your Search Words :(</p></li>
<?php } ?>

ページネーション クラスのデータベース入力は次のとおりです。

$freebiesquery = $pdo->prepare($string . " LIMIT " . $maxlimit);
$freebiesquery->execute($prep);
$freebiesquery_num = $freebiesquery->rowCount();

これはすべて他のページで機能するため、コードのヘッダーセクションを実行する方法、最初にSQLクエリをフォーマットする方法でなければなりません。

私が得ている唯一のエラーは次のとおりです。

警告: PDOStatement::execute(): SQLSTATE[HY093]: 無効なパラメーター番号: バインドされた変数の数が数値と一致しません

警告: PDOStatement::execute(): SQLSTATE[HY093]: 無効なパラメーター番号です

しかし、これは私がテーマを数えたので、同じではありませんか?

4

1 に答える 1