我确信这是非常基本的东西,但我似乎无法找到我的错误。
我正在尝试执行以下操作......
$c = db_connect();
$email = addslashes($email);
$sql = "SELECT * FROM RUSER WHERE email LIKE '" . $email . "';";
$query = oci_parse($c, $sql) or die(oci_error($c));
$response = oci_execute($query) or die(oci_error($c));
但我得到oci8 statement Warning: oci_execute(): ORA-00911: invalid character in /path/to/file.php on line 67
,其中第67行是分配$response
的地方。
这意味着$query
有问题吗?但我似乎无法找到那将是什么。原始sql从命令行执行正常。 echoing get_resource_type($query)
给出了资源ID ...
我做错了什么?
答案 0 :(得分:12)
不要在SQL中包含;
。 ;
不是SQL本身的一部分,它被各种SQL客户端(例如sql * plus)用作分隔符,用于标记要发送到服务器的命令的结尾。
答案 1 :(得分:1)
第一个错误是
$c = oci_connect("user","password","host/dbname") // db_connect() is not true
第二个错误是不应该有“;”在声明中
$sql = "SELECT * FROM RUSER WHERE email LIKE '" . $email . "';";
应该是
$sql = "SELECT * FROM RUSER WHERE email LIKE '" . $email . "'";
如果你想比较好用户“=”比LIKE
答案 2 :(得分:1)
是的,分号是一个问题,但不是唯一的问题。
%
,_
),则无需进行LIKE比较。建议的代码:
$stmt = oci_parse($conn, "SELECT * FROM RUSER WHERE email = :email");
oci_bind_by_name($stmt, ":email", $email);
oci_execute($stmt);
$count = oci_fetch_all($stmt, $resultSet, 0, -1, OCI_FETCHSTATEMENT_BY_ROW);
// hypothetical outputs:
// $count = 1
// $resultSet = [['id => 3, 'email' => 'example@example.com', ...]]