【发布时间】:2017-09-27 11:35:06
【问题描述】:
我正在尝试将 Mysqli 代码转换为我在互联网上找到的 Ajax 无限滚动系统的 PDO,因此我可以将其添加到我为学习 php 制作的博客中。 这是原始的 ajax.php 文件:
if( isset( $_POST['start'] ) && isset( $_POST['limit'] ) && !empty( $_POST['start'] ) && !empty( $_POST['limit'] ) ){
$start = $_POST['start'];
$limit = $_POST['limit'];
$query = "SELECT * FROM timeline limit $start, $limit";
$result = mysqli_query($con, $query) or die('Error: ' . mysqli_error($con));
$data = array();
$rowcount = mysqli_num_rows($result);
$data['count'] = $rowcount;
while($row = mysqli_fetch_assoc($result)) {
$data['content'][] = $row;
}
mysqli_close($con);
echo json_encode($data);exit;
}
这是我的尝试,对我来说一切都很好,但仍然无法正常工作,所以我想我搞砸了一些 PDO 函数...
if( isset( $_POST['start'] ) && isset( $_POST['limit'] ) && !empty( $_POST['start'] ) && !empty( $_POST['limit'] ) ){
$start = $_POST['start'];
$limit = $_POST['limit'];
$stmt = "SELECT * FROM timeline limit $start, $limit";
$data = array();
$rowcount = $stmt->fetchAll();
$data['count'] = $rowcount;
foreach ($db->query($stmt) as $row) {
$data['content'][] = $row;
}
echo json_encode($data);
}
我知道我应该使用 PDO 准备好的语句,我会,但首先我想让它按原样工作......
这里是 Ajax script.js 本身:
flag = true;
$(window).scroll(function() {
if($(window).scrollTop() + $(window).height() == $(document).height()){
first = $('#first').val();
limit = $('#limit').val();
no_data = true;
if(flag && no_data){
flag = false;
$('#loader').show();
$.ajax({
url : 'ajax.php',
dataType: "json",
method: 'post',
data: {
start : first,
limit : limit
},
success: function( data ) {
flag = true;
$('#loader').hide();
if(data.count > 0 ){
first = parseInt($('#first').val());
limit = parseInt($('#limit').val());
$('#first').val( first+limit );
$('#timeline-container');
$.each(data.content, function(key, value ){
if(value.event!=''){
html = '<li class="timeline-item">';
html += '<div class="timeline-badge" data-
toggle="popover" data-placement="left" data-
trigger="hover" data-
content="Mention"><a href="#"></a></div>';
html += '<div class="timeline-panel">';
html += '<div class="timeline-heading">';
html += '<p>This is the new post: </p>';
html += '<div class="timeline-date"><i class="fa fa-
calendar-o"></i> '+value.date+'</div>';
html += '</div>';
html += '<div class="timeline-content">';
html += '<p>'+value.post+'</p>';
html += '</div>';
html += '</li>';
}
$('#timeline-container').append( html );
$('.timeline-item').waypoint({
triggerOnce: true,
offset: '80%',
handler: function() {
jQuery(this).addClass('animated fadeInUp');
}
});
});
}else{
alert('No more data to show');
no_data = false;
}
},
error: function( data ){
flag = true;
$('#loader').hide();
no_data = false;
alert('Something went wrong, Please contact admin');
}
});
}
} });
这是我的配置文件,以备不时之需...提前感谢大家!
define('DBHOST','localhost');
define('DBUSER','root');
define('DBPASS','');
define('DBNAME','my_db');
$db = new PDO("mysql:host=".DBHOST.";charset=utf8;dbname=".DBNAME, DBUSER,
DBPASS);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
define('FIRST', 4);
define('LIMIT', 4);
【问题讨论】:
-
查询前无法获取
-
也试过用查询,还是不行...
-
$rowcount = $stmt->fetchAll();应该会导致错误。$stmt是字符串,不是 PDO 语句。 -
@Fred-ii- 也试过这样: $stmt = $db->query("SELECT * FROM timeline limit $start, $limit"); $数据 = 数组(); $rowcount = $stmt->fetchAll(); $data['count'] = $rowcount;
标签: php jquery ajax mysqli pdo