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);