これを機能させようとしていますが、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]: 無効なパラメーター番号です
しかし、これは私がテーマを数えたので、同じではありませんか?