4

我正在使用 PHP 中的 ODBC 扩展来连接到 SQL 2000 服务器。这是我所反对的:

  1. odbc_exec()我可以使用OR执行查询
  2. 我可以执行查询odbc_execute()

在我看来,这两种查询执行方法之间的差异几乎就像白天和黑夜一样:

  1. odbc_exec()将执行非 SQL 安全查询并返回查询结果
  2. odbc_execute()与 结合使用odbc_prepare()以对数据库执行 SQL 安全查询。但是,odbc_execute()它只能返回一个布尔值,因此不能用于从语句返回结果,或检查从or语句SELECT更新了多少行UPDATEDELETE

这真的是这一切的工作方式,还是有一些方法可以转义值以供使用odbc_exec()或从中获取结果odbc_execute()

PHP 文档似乎没有解决上述困境的任何解决方案。

感谢您的时间。

4

2 回答 2

6

您正在运行的查询的资源由 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
}
于 2012-06-27T21:52:21.823 回答
3

准备好的语句与“指向”准备好的语句的资源结合使用。

将准备好的语句想象成您在 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
}
?>
于 2012-06-27T21:54:42.900 回答