Разве строки PHP не похожи на множественные вставки переменных? - PullRequest
0 голосов
/ 03 марта 2010

Я использую PHP 5.2 с Oracle Database 11.1.

код

$query = oci_parse($conn, "SELECT * FROM COMMENTS WHERE PINID=$pinID and COMMENTID=$commentID");

приводит к этой ошибке:

Предупреждение : oci_execute () [function.oci-execute]: ORA-00904: «КОММЕНТАРИИ»: неверный идентификатор в C: \ IODwww \ hello.php в строке 159
^

Но работает это нормально:

$query = oci_parse($conn, "SELECT * FROM COMMENTS WHERE PINID=$pinID and COMMENTID=1");

Это результат того, что я вставил несколько переменных в строку запроса, или я совершил какую-то другую ошибку?

Ответы [ 4 ]

3 голосов
/ 03 марта 2010

По причинам производительности и внедрения SQL-кода вы должны использовать переменные-заполнители , например:

$query = oci_parse($conn, "SELECT * FROM COMMENTS WHERE PINID = :pinID and COMMENTID = :commentID");
oci_bind_by_name($query, ':pinID', $pinID, -1, SQLT_INT);
oci_bind_by_name($query, ':commentID', $commentID, -1, SQLT_INT);
oci_execute($query);
2 голосов
/ 03 марта 2010

oci_execute() предупреждение не является предупреждением PHP. Что-то не так с результирующим запросом.

Распечатай и посмотри.

1 голос
/ 03 марта 2010

Нет проблем с несколькими переменными в строке PHP .

Чтобы устранить проблему, вы можете попробовать:

var_dump("SELECT * FROM COMMENTS WHERE PINID=$pinID and COMMENTID=$commentID");

и посмотрите, действительно ли результат соответствует:

string(...) "SELECT * FROM COMMENTS WHERE PINID=1 and COMMENTID=1" 

Единственное, о чем я могу думать, это то, что commentID пуст или содержит «\ n» или что-то прикрепленное к нему, что вызывает ошибку.

Код ошибки, который выдает база данных: «Введенное имя столбца отсутствует или неверно.», Не имеет большого смысла для меня, если работает с =1.

0 голосов
/ 03 марта 2010

Попробуйте поместить переменные в скобки:

$query = oci_parse($conn, "SELECT * FROM COMMENTS WHERE PINID={$pinID} and COMMENTID={$commentID}");

Также убедитесь, что $commentID не возвращает пустое значение, которое оставило бы только COMMENTID= в конце и вызвало бы ошибку при попытке выполнить запрос.

...