我有一个从oracle表返回一行的函数。
我是个从oci8返回数据的新手。我希望你能帮助我在返回一个结果方面优化函数。
我考虑过将ROWNUM =1添加到sql中,但不确定这是否是最好的情况。此外,返回$course_listing‘’SUBJ_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];
}发布于 2013-05-30 23:01:04
我不是PHP程序员,但是看起来您正在构造一个包含搜索值的SQL语句。这样做是不好的。
原因1: SQL注入http://xkcd.com/327/
原因2. Oracle有一个最新的SQL池。如果SQL已经在池中,Oracle将不必再次解析SQL。
您应该改用参数。代码应该是这样的(语法不正确,因为我不知道PHP):
$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});发布于 2013-05-30 23:01:21
如果您只想返回一行,那么合并WHERE ROWNUM = 1将是最好的。这种方法可以确保您正在处理的唯一数据正是您想要的数据。
SELECT SUBJECT_DESC FROM szvcourses WHERE TERM_CODE = '{$term_code}' AND SUBJ_CODE = '{$subj_code}' AND ROWNUM = 1");https://stackoverflow.com/questions/16839185
复制相似问题