Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从oci8 oracle数据库中获取一行_Php_Sql_Oracle - Fatal编程技术网

Php 从oci8 oracle数据库中获取一行

Php 从oci8 oracle数据库中获取一行,php,sql,oracle,Php,Sql,Oracle,我有一个从oracle表返回一行的函数 我不熟悉从oci8返回数据。我希望您能帮助我优化函数,以返回一个结果 我考虑过将ROWNUM=1添加到sql中,但不确定这是否是最好的情况。此外,返回$course_清单['sub_DESC']的索引0似乎有些草率 function getSubject($term_code = false, $subj_code = false) { if(!$term_code || !$subj_code) return false;

我有一个从oracle表返回一行的函数

我不熟悉从oci8返回数据。我希望您能帮助我优化函数,以返回一个结果

我考虑过将ROWNUM=1添加到sql中,但不确定这是否是最好的情况。此外,返回$course_清单['sub_DESC']的索引0似乎有些草率

function getSubject($term_code = false, $subj_code = false)
{
    if(!$term_code || !$subj_code)
        return false;

    $stid = oci_parse($this->conn, "SELECT SUBJECT_DESC FROM szvcourses WHERE TERM_CODE = '{$term_code}' AND SUBJ_CODE = '{$subj_code}'");

    oci_execute($stid);
    oci_fetch_all($stid, $course_listing);

    if(count($course_listing['SUBJECT_DESC']) == 0)
        return false;

    return $course_listing['SUBJECT_DESC'][0];
}

我不是PHP程序员,但看起来您正在构造一个包含搜索值的SQL语句。这样做是不好的

原因1:SQL注入

理由2。Oracle有一个最近的SQL库。如果SQL已经在池中,Oracle将不必再次解析SQL

您应该改用参数。代码应该是这样的(语法不正确,因为我不懂PHP):


如果希望只返回一行,则最好合并
,其中ROWNUM=1
。这种方法确保您处理的唯一数据是您想要的确切数据

SELECT SUBJECT_DESC FROM szvcourses WHERE TERM_CODE = '{$term_code}' AND SUBJ_CODE = '{$subj_code}' AND ROWNUM = 1");

谢谢,使用oci\u bind\u by\u name w/ROWNUM=1
SELECT SUBJECT_DESC FROM szvcourses WHERE TERM_CODE = '{$term_code}' AND SUBJ_CODE = '{$subj_code}' AND ROWNUM = 1");