首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从oci8 oracle数据库中提取一行

从oci8 oracle数据库中提取一行
EN

Stack Overflow用户
提问于 2013-05-30 22:44:36
回答 2查看 1.2K关注 0票数 1

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

我是个从oci8返回数据的新手。我希望你能帮助我在返回一个结果方面优化函数。

我考虑过将ROWNUM =1添加到sql中,但不确定这是否是最好的情况。此外,返回$course_listing‘’SUBJ_DESC‘的索引0似乎很草率。

代码语言:javascript
复制
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];
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-30 23:01:04

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

原因1: SQL注入http://xkcd.com/327/

原因2. Oracle有一个最新的SQL池。如果SQL已经在池中,Oracle将不必再次解析SQL。

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

代码语言:javascript
复制
   $stid = oci_parse($this->conn, "SELECT SUBJECT_DESC FROM szvcourses WHERE TERM_CODE = ? AND SUBJ_CODE = ?");
   oci_set_string_parameter($stid, 1, {$term_code}); 
   oci_set_string_parameter($stid, 2, {$subj_code});
票数 1
EN

Stack Overflow用户

发布于 2013-05-30 23:01:21

如果您只想返回一行,那么合并WHERE ROWNUM = 1将是最好的。这种方法可以确保您正在处理的唯一数据正是您想要的数据。

代码语言:javascript
复制
SELECT SUBJECT_DESC FROM szvcourses WHERE TERM_CODE = '{$term_code}' AND SUBJ_CODE = '{$subj_code}' AND ROWNUM = 1");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16839185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档