无法分页:总值无效(必须是 > 0 的整数)在 Php PDO 中
Unable to paginate: Invalid total value (must be an integer > 0) In Php PDO
几天来我一直在处理一个查询,并坚持成功执行它。我正在使用位于此处的分页 class
Pagination.class
到目前为止,这是我的代码。问题是它一直向我显示错误
if(isset($_REQUEST['maker'])){$makes = $_REQUEST['maker']; }
if(isset($_REQUEST['transmission'])){ $trans = $_REQUEST['transmission']; }
if(isset($_REQUEST['year_from'])){ $yearf = $_REQUEST['year_from']; }
if(isset($_REQUEST['year_to'])){ $yeart = $_REQUEST['year_to']; }
if(isset($_REQUEST['fuel'])){ $fuels = $_REQUEST['fuel']; }
if($makes == NULL || NULL == $makes)
{
$makes='%';
}
if($trans == NULL || NULL == $trans)
{
$trans='%';
}
if($fuels == NULL || NULL == $fuels)
{
$fuels='%';
}
try{
$conn = new PDO('mysql:host=localhost;dbname=vc', 'root', '');
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$result = $conn->prepare('SELECT COUNT(*) FROM vehicle WHERE
(`Make` LIKE :maker) AND(`Transmission` LIKE :transmission) AND
(YEAR(STR_TO_DATE(`Year`,"%Y")) BETWEEN (:year_from) AND (:year_to)) AND
(`Fuel` LIKE :fuel)');
$result->bindParam(':maker', $makes, PDO::PARAM_STR);
$result->bindParam(':transmission', $trans, PDO::PARAM_STR);
$result->bindParam(':year_from', $yearf,PDO::PARAM_STR);
$result->bindParam(':year_to', $yeart, PDO::PARAM_STR);
$result->bindParam(':fuel', $fuels, PDO::PARAM_STR);
$result->execute();
$num_rows=$result->fetchColumn();
$pages = new Paginator($num_rows,5,array(15,3,6,9,12,25,50,100,250,'All'));
//echo $pages->display_pages();
//echo "<span class=\"\">".$pages->display_jump_menu().$pages->display_items_per_page()."</span>";
$stmt = $conn->prepare('SELECT * FROM vehicle WHERE
(`Make` LIKE :maker) AND (`Transmission` LIKE :transmission) AND
(YEAR(STR_TO_DATE(`Year`,"%Y")) BETWEEN (:year_from) AND (:year_to))
AND (`Fuel` LIKE :fuel) ORDER BY Year DESC LIMIT :start,:end');
$stmt->bindParam(':start', $pages->limit_start, PDO::PARAM_INT);
$stmt->bindParam(':end', $pages->limit_end, PDO::PARAM_INT);
$stmt->bindParam(':maker', $makes, PDO::PARAM_STR);
$stmt->bindParam(':transmission', $trans, PDO::PARAM_STR);
$stmt->bindParam(':year_from', $yearf, PDO::PARAM_STR);
$stmt->bindParam(':year_to', $yeart, PDO::PARAM_STR);
$stmt->bindParam(':fuel', $fuels, PDO::PARAM_STR);
$stmt->execute();
$rs = $stmt->fetchAll();
无法分页:总值无效(必须是 > 0 的整数)
将年份字段留空时会出现错误。当插入 year_from 和 year_to 字段时,它的工作正常。任何人都可以帮忙吗?坚持了 5 天
年份的数据库字段是日期
问题在子句之间
如果将 year_from
和 year_to
参数留空,$yearf
和 $yeart
将保持未定义状态,以下代码
$result->bindParam(':year_from', $yearf,PDO::PARAM_STR);
$result->bindParam(':year_to', $yeart, PDO::PARAM_STR);
会将参数绑定到空字符串,这会导致这样的查询
BETWEEN ('') AND ('')
结果为空,$num_rows
为0
,Pagination构造函数中校验失败
您应该在 php.ini 中使用 error_reporting=E_ALL
和 display_errors=On
进行开发,这会警告您未定义的变量。
几天来我一直在处理一个查询,并坚持成功执行它。我正在使用位于此处的分页 class Pagination.class
到目前为止,这是我的代码。问题是它一直向我显示错误
if(isset($_REQUEST['maker'])){$makes = $_REQUEST['maker']; }
if(isset($_REQUEST['transmission'])){ $trans = $_REQUEST['transmission']; }
if(isset($_REQUEST['year_from'])){ $yearf = $_REQUEST['year_from']; }
if(isset($_REQUEST['year_to'])){ $yeart = $_REQUEST['year_to']; }
if(isset($_REQUEST['fuel'])){ $fuels = $_REQUEST['fuel']; }
if($makes == NULL || NULL == $makes)
{
$makes='%';
}
if($trans == NULL || NULL == $trans)
{
$trans='%';
}
if($fuels == NULL || NULL == $fuels)
{
$fuels='%';
}
try{
$conn = new PDO('mysql:host=localhost;dbname=vc', 'root', '');
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$result = $conn->prepare('SELECT COUNT(*) FROM vehicle WHERE
(`Make` LIKE :maker) AND(`Transmission` LIKE :transmission) AND
(YEAR(STR_TO_DATE(`Year`,"%Y")) BETWEEN (:year_from) AND (:year_to)) AND
(`Fuel` LIKE :fuel)');
$result->bindParam(':maker', $makes, PDO::PARAM_STR);
$result->bindParam(':transmission', $trans, PDO::PARAM_STR);
$result->bindParam(':year_from', $yearf,PDO::PARAM_STR);
$result->bindParam(':year_to', $yeart, PDO::PARAM_STR);
$result->bindParam(':fuel', $fuels, PDO::PARAM_STR);
$result->execute();
$num_rows=$result->fetchColumn();
$pages = new Paginator($num_rows,5,array(15,3,6,9,12,25,50,100,250,'All'));
//echo $pages->display_pages();
//echo "<span class=\"\">".$pages->display_jump_menu().$pages->display_items_per_page()."</span>";
$stmt = $conn->prepare('SELECT * FROM vehicle WHERE
(`Make` LIKE :maker) AND (`Transmission` LIKE :transmission) AND
(YEAR(STR_TO_DATE(`Year`,"%Y")) BETWEEN (:year_from) AND (:year_to))
AND (`Fuel` LIKE :fuel) ORDER BY Year DESC LIMIT :start,:end');
$stmt->bindParam(':start', $pages->limit_start, PDO::PARAM_INT);
$stmt->bindParam(':end', $pages->limit_end, PDO::PARAM_INT);
$stmt->bindParam(':maker', $makes, PDO::PARAM_STR);
$stmt->bindParam(':transmission', $trans, PDO::PARAM_STR);
$stmt->bindParam(':year_from', $yearf, PDO::PARAM_STR);
$stmt->bindParam(':year_to', $yeart, PDO::PARAM_STR);
$stmt->bindParam(':fuel', $fuels, PDO::PARAM_STR);
$stmt->execute();
$rs = $stmt->fetchAll();
无法分页:总值无效(必须是 > 0 的整数)
将年份字段留空时会出现错误。当插入 year_from 和 year_to 字段时,它的工作正常。任何人都可以帮忙吗?坚持了 5 天
年份的数据库字段是日期
问题在子句之间
如果将 year_from
和 year_to
参数留空,$yearf
和 $yeart
将保持未定义状态,以下代码
$result->bindParam(':year_from', $yearf,PDO::PARAM_STR);
$result->bindParam(':year_to', $yeart, PDO::PARAM_STR);
会将参数绑定到空字符串,这会导致这样的查询
BETWEEN ('') AND ('')
结果为空,$num_rows
为0
,Pagination构造函数中校验失败
您应该在 php.ini 中使用 error_reporting=E_ALL
和 display_errors=On
进行开发,这会警告您未定义的变量。