我正在使用PHP中的ODBC扩展连接到SQL 2000服务器。这是我所面对的:
- 我可以使用
odbc_exec()
或执行查询 - 我可以使用
odbc_execute()
执行查询
在我看来,这两种查询执行方法之间的差异几乎与黑夜和白天一样不同:
-
odbc_exec()
将执行非 SQL 安全查询并返回查询的结果 -
odbc_execute()
与odbc_prepare()
结合使用,以对数据库执行 SQL 安全查询。但是,odbc_execute()
只能返回布尔值,因此不能用于返回SELECT
语句的结果,也不能用于检查从UPDATE
或DELETE
语句更新了多少行。
这真的是这一切的工作方式吗,或者是否有某种方法可以转义值以用于odbc_exec()
或从odbc_execute()
中获取结果?
PHP文档似乎没有解决上述困境的任何解决方案。
谢谢你的时间。
您
正在运行的查询的资源由 odbc_prepare 函数返回,而不是odbc_execute。
这两个代码块执行相同的操作:
$query=odbc_exec("SELECT * FROM table WHERE userinput=".$hopefully_escaped_user_input);
while($row=odbc_fetch_array($query) {
//do stuff with $row
}
$query=odbc_prepare("SELECT * FROM table WHERE userinput=?");
odbc_execute($query,Array($user_input);
while($row=odbc_fetch_array($query) {
//do stuff with $row
}
预准备语句与"指向"预准备语句的资源结合使用。
想象一下,准备好的语句就好像它们是您在SQL中定义的函数/过程,然后您使用资源来"调用"该函数。
这里的例子:
<?php
$res = odbc_prepare($db_conn, $query_string);
if(!$res) die("could not prepare statement ".$query_string);
if(odbc_execute($res, $parameters)) {
$row = odbc_fetch_array($res);
} else {
// handle error
}
?>