Php 带默认函数值的PDO限制
我有一个方法,它将项目数&start from作为限制并返回值Php 带默认函数值的PDO限制,php,mysql,limit,Php,Mysql,Limit,我有一个方法,它将项目数&start from作为限制并返回值 public function comment_recent_comments_block($numbers = 10, $start_from = 1) { $sql = " SELECT comment.comment_id, comment.subject, content.content_id, content.content_type_id FRO
public function comment_recent_comments_block($numbers = 10, $start_from = 1) {
$sql = " SELECT comment.comment_id, comment.subject,
content.content_id, content.content_type_id
FROM comment
LEFT JOIN content ON content.content_id = comment.reference_id
WHERE comment.reference_table = 'content'
AND comment.subject IS NOT NULL AND comment.subject !='' ";
$sql .=" ORDER BY comment.weightage DESC, comment.creation_date DESC ";
$sql .= " LIMIT :lmt_start_from , :lmt_no_of_records ";
……代码的其余部分。。。
}
我希望PHP考虑10和1作为默认值,但它不起作用。我的sql抛出错误,显示“NULL”值处的错误。
现在,如果我显式地检查参数并设置如下值
$numbers = empty($numbers) ? 10 : $numbers;
$start_from = empty($start_from) ? 1 : $start_from;
在这种方法中,它起作用了
你能解释一下我在第一种方法中遗漏了什么吗。为什么PHP不考虑默认值…我曾尝试输入字符串“10”和“1”,但是没有执行< /P>
谢谢
---------------------------------------完整代码---------------------------------
public function findBySql($sql, $value_a = '') {
global $dbc;
$stmt = $dbc->connection->prepare(" $sql ");
if (!empty($value_a)) {
foreach ($value_a as $key => $value) {
if (!empty($value)) {
if ($key == 'lmt_no_of_records' || $key == 'lmt_start_from') {
$stmt->bindValue(":$key", $value, PDO::PARAM_INT);
} else {
$stmt->bindValue(":$key", $value);
}
} else {
$stmt->bindValue(":$key", NULL);
}
}
}
try {
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_CLASS);
return $result;
} catch (PDOException $e) {
echo "Record couldnt be fetched !!: " . $e->getMessage();
return 0;
}
}
public function comment_recent_comments_block($numbers = 10, $start_from = 1) {
$numbers = empty($numbers) ? 10 : $numbers;
$start_from = empty($start_from) ? 1 : $start_from;
$sql = " SELECT comment.comment_id, comment.subject,
content.content_id, content.content_type_id
FROM comment
LEFT JOIN content ON content.content_id = comment.reference_id
WHERE comment.reference_table = 'content'
AND comment.subject IS NOT NULL AND comment.subject !='' ";
$sql .=" ORDER BY comment.weightage DESC, comment.creation_date DESC ";
$sql .= " LIMIT :lmt_start_from , :lmt_no_of_records ";
$value_a = ['lmt_no_of_records' => $numbers, 'lmt_start_from' => $start_from ];
$result = $this->findBySql($sql, $value_a);
$comment_string = '';
if (count($result) > 0) {
$comment_string .= '<ul class="documentation_list comment">';
foreach ($result as $records) {
$comment_string .= '<li class="comment_subject">';
$comment_string .= '<a href="' . HOME_URL . 'content.php?mode=2&' . 'content_id=' . $records->content_id .
'&content_type_id=' . $records->content_type_id . '#comment_id_' . $records->comment_id . '">';
$comment_string .= $records->subject . '</a>';
$comment_string .= '</li>';
}
$comment_string .= '</ul>';
}
return $comment_string;
}
公共函数findBySql($sql,$value\u a=''){
全球$dbc;
$stmt=$dbc->connection->prepare($sql”);
如果(!空($value_a)){
foreach($value\u作为$key=>$value){
如果(!空($value)){
如果($key='lmt_no_of_records'| |$key=='lmt_start_from'){
$stmt->bindValue(“:$key”,$value,PDO::PARAM_INT);
}否则{
$stmt->bindValue(“:$key”,$value);
}
}否则{
$stmt->bindValue(“:$key”,NULL);
}
}
}
试一试{
$stmt->execute();
$result=$stmt->fetchAll(PDO::FETCH_类);
返回$result;
}捕获(PDO$e){
echo“无法获取记录!!:”$e->getMessage();
返回0;
}
}
公共函数注释\u最近的注释\u块($numbers=10,$start\u from=1){
$numbers=空($numbers)?10:$numbers;
$start\u from=空($start\u from)?1:$start\u from;
$sql=“选择comment.comment\u id,comment.subject,
content.content\u id,content.content\u type\u id
评论
content.content\u id=comment.reference\u id上的左连接内容
其中comment.reference_table='content'
comment.subject不为NULL,comment.subject!='';
$sql.=“按注释排序。权重说明,注释。创建\u日期说明”;
$sql.=“限制:lmt\u开始时间,:lmt\u没有记录”;
$value_a=['lmt_no_of_records'=>$number,'lmt_start_from'=>$start_from];
$result=$this->findBySql($sql,$value\u a);
$comment_string='';
如果(计数($result)>0){
$comment_string.='”;
foreach($记录的结果){
$comment\u string.='- ';
$comment_字符串='';
$comment_string.='
';
}
$comment_string.='
';
}
返回$comment_字符串;
}
现在,这是可行的,但如果我删除下面两条语句
$numbers=空($numbers)?10:数字;
$start\u from=空($start\u from)?1:$start_from;
它不会工作您发布的代码中没有特定于PDO的内容,我认为问题也与此无关(但这是可能的)。
请试试类似的东西
<?php
class Foo {
public function comment_recent_comments_block($numbers = 10, $start_from = 1) {
// put the following three lines of code at the beginning of your method comment_recent_comments_block
var_export(debug_backtrace(0, 1));
var_export( array($numbers, $start_from) );
die;
}
}
$foo = new Foo;
$foo->comment_recent_comments_block();
这表明该方法实际上是在没有参数的情况下调用的,并且相应的默认值已分配给$numbers和$start\u from。您的输出是什么?您的代码的其余部分有一些内容请共享调用代码的函数请发布您正在定义的部分
:lmt_start_from
和:lmt_no_of_records
,意思是绑定参数/值和执行调用。我刚才注意到的另一件事是:“我的sql抛出错误,显示'NULL'值的错误”从错误消息中?您应该始终发布完整的错误消息以帮助诊断。如果这是来自错误消息,那么问题可能根本不在您的范围之内。comment.subject可以为空吗?请将您的表结构和完整的错误消息添加到问题中。在新注释中添加了完整的函数。。。我最初没有发布整个代码,因为大多数人抱怨为什么要扭曲PDO,而不理解需求和逻辑。。。再次感谢Hanks VolkerK,我会检查这一点,你指出的很符合逻辑。
array (
0 =>
array (
'file' => 'something.php',
'line' => 11,
'function' => 'comment_recent_comments_block',
'class' => 'Foo',
'type' => '->',
'args' =>
array (
),
),
)array (
0 => 10,
1 => 1,
)