【问题标题】:How to get number of rows in php oci for SELECT statement如何在 php oci 中获取 SELECT 语句的行数
【发布时间】:2020-01-05 10:23:09
【问题描述】:

我需要帮助才能从包含 where 子句的 select 语句中获取行数。我尝试了各种选择。但这对我不起作用。我在下面显示了我的代码 sn-p。

我得到了 o/p “0 rows fetched”。但是当我在 Oracle DB 上执行选择查询时,它返回 1 行。

因此,请帮助我通过 OCI 获取 PHP 中的 select 语句数。

环境:

  • Windows、Php 7.3 和 Oracle 12c

这里是 Oracle 查询

CREATE TABLE users 
(
    no            INTEGER NOT NULL,
    id            VARCHAR2(200) NOT NULL,
    fullname      VARCHAR2(200),
    email         VARCHAR2(200),
    givenname     VARCHAR2(200),
    first_login   VARCHAR2(200),
    last_login    VARCHAR2(200)
);

INSERT INTO USERS (no, id,fullname,email,givenname,first_login,last_login) 
VALUES (1,'Bharat','Bharat','Bharat@gmail.com','Bharat','2019-08-20 03:08:42','2019-08-20 03:08:42');

INSERT INTO USERS (no, id,fullname,email,givenname,first_login,last_login) 
VALUES (1,'bharat','bharat','bharat@gmail.com','bharat','2019-08-20 03:08:42','2019-08-20 03:08:42');

PHP:

    <?php
    # connect localhost oracle
    $conn = oci_connect('c##admin', 'ibm123', '127.0.0.1/XE');
    $res="array"; #array to staore oci_fetch_all o/p
    #thow error if unable to make connection
    if (!$conn) {
        $m = oci_error();
        trigger_error(htmlentities($m['message']), E_USER_ERROR);
    }
    # Parse oracle query
    $stid = oci_parse($conn, "select * from users where ID='Bharat'");
    # execute statement
    oci_execute($stid);
    # fetch all content
    $nrows = oci_fetch_all($stid, $res);
    echo "$nrows rows fetched<br>\n";
    # Dump content
    var_dump($res);
    $numrows = oci_fetch_array($stid, OCI_BOTH);
    echo oci_num_rows($stid) . " rows.<br />\n";
    print_r($numrows);
    oci_free_statement($stid);
    oci_close($conn);
?>

这是输出。预期的输出是提取 1 行。

0 rows fetched

请帮我解决这个问题

【问题讨论】:

  • 您确定您的表中有这样一条匹配记录,并且您是否尝试过直接针对 Oracle 执行此查询?
  • 是的。这是甲骨文表。
    CREATE TABLE users ( no INTEGER NOT NULL, id VARCHAR2(200) NOT NULL, fullname VARCHAR2(200), email VARCHAR2(200), givenname VARCHAR2(200), first_login VARCHAR2(200), last_login VARCHAR2(200) );
    插入用户(id,fullname,email,givenname,first_login,last_login)值('bharat','bharat','bharat@gmail.com','bharat',' 2019-08-20 03:08:42','2019-08-20 03:08:42')
  • 在 INSERT 中,您的代码中有 id: 'bharat' 和 'Bharat',它区分大小写,儿子要小心。
  • 您正在尝试搜索'Bharat',但您的表有'bharat' 值,小写b
  • 尝试不带 WHERE 子句的查询,只是为了检查问题是否来自过滤器。

标签: php oracle oracle-call-interface


【解决方案1】:

在使用oci_num_rows($stid)之前需要使用函数:oci_fetch_all($stid, $out)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    • 2021-06-24
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多