【发布时间】:2016-01-08 21:22:16
【问题描述】:
我正在尝试使用两个表完成内部联接(Oracle 称它们为等联接),但我只是缺少一些东西,因为它与 MySQL 内部联接不同。我也是 PHP 的新手(来自 Lasso),所以为了我自己的理智,我试图严格使用我的语法。我查看了有关此错误的所有其他帖子,但没有帮助。
使用 PHP 5.5.29 连接到 Oracle 12c 数据库,OCI8 已安装并在 php 信息页面中进行验证。
Oracle's explanation of inner joins
$login 是明文,$pw 在这个 sn-p 之前被散列:
// separate the login types by the "_" character
if (strpos($login, "_") == true) {
$fieldname = 'web_password_hash';
$dynfield = 'web_id';
$dynfield1 = 's.web_id';
} else {
$fieldname = 'student_web_password_hash';
$dynfield = 'student_web_id';
$dynfield1 = 's.student_web_id';
}
$schoolid = '(pcs.schoolid=4 OR pcs.schoolid=5)';
// search custom table for a field with the correct password (parent/student)
$dbc = oci_connect($psusername, $pspassword, $psconnection);
if(!$dbc) {
echo "Oracle Not connected";
} else {
$stmt = oci_parse($dbc, 'SELECT pcs.student_number AS snumber, :dynfield1 AS loginid, s.ID AS sid, s.family_ident AS famid, s.firstname AS fname, s.last_name AS lname, s.grade_level AS gradelevel
FROM pvsis_custom_students pcs, students s
WHERE pcs.student_number=s.student_number
AND :schoolid
AND pcs.field_name=:fieldname
AND pcs.string_value=:pw
AND s.enroll_status=0;');
// bind parameters to prevent SQL injection
oci_bind_by_name($stmt, ':dynfield1', $dynfield1);
oci_bind_by_name($stmt, ':fieldname', $fieldname);
oci_bind_by_name($stmt, ':schoolid', $schoolid);
oci_bind_by_name($stmt, ':pw', $pw);
// execute statement
oci_execute($stmt);
然后我得到的错误是:警告: oci_execute(): ORA-00920: invalid relational operator in /path/to/file line XXX
【问题讨论】:
-
您需要选择
s.student_number。 -
好的。有两种不同的选择用于两种不同的目的。此外,请包含执行并引发错误的 实际 选择。