【发布时间】:2018-08-12 15:41:44
【问题描述】:
我正在尝试找出问题所在。
这是我的代码:
<?php
define("ROW_PER_PAGE",2);
require_once("config.php");
?>
<div class="container">
<div class="row">
<div class="col-md-12">
<?
$search_keyword = '';
if(!empty($_POST['search']['keyword'])) {
$search_keyword = $_POST['search']['keyword'];
}
$sql = "SELECT * FROM finance WHERE `name_first` LIKE :keyword ORDER BY `fID` `DESC` ";
/* Pagination Code starts */
$per_page_html = '';
$page = 1;
$start=0;
if(!empty($_POST["page"])) {
$page = $_POST["page"];
$start=($page-1) * ROW_PER_PAGE;
}
try {
$limit=" limit " . $start . "," . ROW_PER_PAGE;
$pagination_statement = $db->prepare($sql);
$pagination_statement->bindValue(':keyword', '%' . $search_keyword . '%', PDO::PARAM_STR);
$pagination_statement->execute();
} catch (PDOException $e) {
echo "Error : Check your error message.";
file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}
$row_count = $pagination_statement->rowCount();
if(!empty($row_count)){
$per_page_html .= "<div style='text-align:center;margin:20px 0px;'>";
$page_count=ceil($row_count/ROW_PER_PAGE);
if($page_count>1) {
for($i=1;$i<=$page_count;$i++){
if($i==$page){
$per_page_html .= '<input type="submit" name="page" value="' . $i . '" class="btn-page current" />';
} else {
$per_page_html .= '<input type="submit" name="page" value="' . $i . '" class="btn-page" />';
}
}
}
$per_page_html .= "</div>";
}
try {
$query = $sql.$limit;
$pdo_statement = $db->prepare($query);
$pdo_statement->bindValue(':keyword', '%' . $search_keyword . '%', PDO::PARAM_STR);
$pdo_statement->execute();
$result = $pdo_statement->fetchAll();
} catch (PDOException $e) {
echo "Error : Check your error message.";
file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}
?>
<form name='frmSearch' action='' method='post'>
<div style='text-align:right;margin:20px 0px;'><input type='text' name='search[keyword]' value="<?php echo $search_keyword; ?>" id='keyword' maxlength='25'></div>
<table class='tbl-qa'>
<thead>
<tr>
<th class='table-header' width='20%'>First Name</th>
<th class='table-header' width='40%'>Last Name</th>
<th class='table-header' width='20%'>Birth Date</th>
</tr>
</thead>
<tbody id='table-body'>
<?php
if(!empty($result)) {
foreach($result as $row) {
?>
<tr class='table-row'>
<td><?php echo $row['name_first']; ?></td>
<td><?php echo $row['name_last']; ?></td>
<td><?php echo $row['birth_date']; ?></td>
</tr>
<?php
}
}
?>
</tbody>
</table>
<?php echo $per_page_html; ?>
</form>
</div>
</div>
</div>
我收到错误消息说...
SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“DESC”附近使用正确的语法
我知道一些老式的 mysql 代码,但我是 PDO 的初学者。
您能告诉我哪里出了问题/在哪里修复我的代码吗?
PHP:5.6
MySQL:5.6.37
非常感谢您的帮助。
谢谢。
【问题讨论】:
-
去掉 DESC 周围的引号
-
谢谢,如果我删除了 DESC 周围的引用,它就可以工作。但这是另一个问题.....当我添加更多类似此代码的搜索关键字时...... $sql = "SELECT * FROM Finance WHERE
name_firstLIKE :keyword ORname_lastLIKE :keyword ORDER BY @987654325 @DESC"; ......然后我得到这个错误信息说:SQLSTATE[HY093]: Invalid parameter number -
使用 :name_first 和 :name_last 并尝试,而不是同时使用 :keyword
-
我现在想通了。我不得不从 FALSE 更改为 TRUE 到此代码 $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
-
做得很好:-)
标签: php mysql search pdo pagination