PHP在简单的select查询上抛出错误?
不知道发生了什么,我总是出错。我已将问题简化为一个相当小的测试用例,请参见以下内容:PHP在简单的select查询上抛出错误?,php,forms,oracle11g,oracle-call-interface,Php,Forms,Oracle11g,Oracle Call Interface,不知道发生了什么,我总是出错。我已将问题简化为一个相当小的测试用例,请参见以下内容: login.html <form action="login.php" method="post"> <input type="email" name="email" required /> <input type="password" name="password" required /> <input type="submit" valu
login.html
<form action="login.php" method="post">
<input type="email" name="email" required />
<input type="password" name="password" required />
<input type="submit" value="Login"/>
</form>
错误
警告:oci_execute():ORA-01008:第5行的login.php中未绑定所有变量
警告:oci_fetch():ORA-24374:在第7行bool上的login.php中,在fetch或execute和fetch之前定义未完成(false)
您需要将变量$email和$password绑定到oracle占位符。看见此外,占位符应该是
:email
和:password
。冒号(:
)和占位符名称(电子邮件
和密码
)之间有一个空格。您在查询中添加了变量占位符,但没有绑定任何内容
$stid2 = oci_parse($conn, 'SELECT EMAIL, PASSWORD FROM TUSERS where EMAIL =:email AND PASSWORD =:password');
oci_bind_by_name($stid2, ':email', $email);
oci_bind_by_name($stid2, ':password', $password);
oci_execute($stid2);
请参见其var_dump()而非vardump(),懒得解释其余内容。您不必绑定电子邮件和密码吗?谢谢,绑定是否也可以执行与消毒相关的操作如果没有,我该用什么呢?正如您所看到的,查询字符串和变量内容是分开定义的,使用db的库知道哪个是哪个。查询和数据可能会在单独的查询中发送到dbms(即使dbms支持)。所以至少这会阻止sql注入;不幸的是,我这里没有代表,否则我会投票支持你的答案和评论:)
$stid2 = oci_parse($conn, 'SELECT EMAIL, PASSWORD FROM TUSERS where EMAIL =:email AND PASSWORD =:password');
oci_bind_by_name($stid2, ':email', $email);
oci_bind_by_name($stid2, ':password', $password);
oci_execute($stid2);