php - 尽管进行了空检查,为什么 pg_fetch_array 仍返回空?

标签 php postgresql

当我的主页中的函数调用时,我执行了这个 php 案例。当我这样输入我的变量时: $tutorReasonString = "I'm fine and working."和 $clientReasonString = "我也很好,谢谢你的提问",这里没有错。但是当我尝试使用 pg_fetch_array() 获取它们时,我得到返回的 NULL 值。

请注意,tutorabsence 和 clientabsence 表不与任何类型的 SQL 触发器相关联,我只在另一个执行中为它们分配完全相同的 id,该 id 从另一个表的行中检索到 php。

case "absencePc":
                
                $id = array_search(post("id"), $_SESSION["keyhash"]);
                
                $tutorAbsSql = "SELECT reason FROM tutorabsence WHERE id='$id'";
                $tutorReason = pg_query($tutorAbsSql);
                if(pg_fetch_row($tutorReason) == NULL) {
                    
                    $tutorStatus = "0";
                    $tutorReasonString = "";
                    
                } else {
                    
                    $tutorStatus = "1";
                //  $tutorReasonString = "I'm working"; This works  
                
                // This returns null.
                    $tutorReasonFetch = pg_fetch_array($tutorReason);
                    $tutorReasonString = $tutorReasonFetch["reason"];
                    
                   
                };
                
                
                $clientAbsSql = "SELECT reason FROM clientabsence WHERE id='$id'";
                $clientReason = pg_query($clientAbsSql);
                if(pg_fetch_row($clientReason) == NULL) {
                    
                    $clientStatus = "0";
                    $clientReasonString = "";

         
                } else {
                    
                                        
                    $clientStatus = "1";  
                //  $clientReasonString = "I'm working";  This works
                
                // This returns null.
                    $clientReasonFetch = pg_fetch_array($clientReason);
                    $clientReasonString = $clientReasonFetch["reason"];
                   
                    
                };
                
         $response[] = array("tutorReason" => $tutorReasonString,
                             "clientReason" => $clientReasonString,
                             "tutorStatus" => $tutorStatus,
                              "clientStatus" => $clientStatus);
                
                echo json_encode($response);
                
break;

最佳答案

您遇到的问题是您从 1 个结果中提取了两次:

$tutorAbsSql = "SELECT reason FROM tutorabsence WHERE id='$id'";
$tutorReason = pg_query($tutorAbsSql);

if(($row = pg_fetch_row($tutorReason)) != false){
  $tutorStatus = "1";
  $tutorReasonString = $row[0];
  print_r($row);
} else {
  $tutorStatus = "0";
  $tutorReasonString = ""; 
}

它在内部向前移动结果指针,然后 pg_fetch_array() 获取下一个不存在的值。

关于php - 尽管进行了空检查,为什么 pg_fetch_array 仍返回空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42321451/

相关文章:

php - 如何格式化时间戳以仅显示日期而不显示时间

php - Propel ORM - UNION 查询

php - 如何使用 XPath 检查 <Success/> 节点是否存在

php - 为什么这个 switch 语句不返回 0 在 0-100 之间?

postgresql - AWS postgres 数据库实例未监听 5432 端口

postgresql - UPSERT - INSERT ... ON CONFLICT 失败,基于函数的索引为 'lower()' 唯一约束

sql - 如何在 Postgresql 中选择和更新 JSON 数组元素?

php - 我需要将 SQL native 放在查询生成器 Doctrine2 中

django - 如何将 Django SQLite 数据库内容放入 Heroku PostGreSQL 数据库?

node.js - 如何让 heroku 与 sequelize.js + postgres 兼容?