我永远不能执行SQL安全查询?

时间:2012-06-27 21:50:00

标签: php sql odbc sql-server-2000

我在PHP中使用ODBC扩展来连接到SQL 2000服务器。以下是我的反对意见:

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

    在我看来,这两种查询执行方法之间的差异几乎与夜晚不同:

    1. odbc_exec()将执行非SQL安全查询并返回查询结果
    2. odbc_execute()odbc_prepare()结合使用,可以对数据库执行SQL安全查询。但是,odbc_execute()只能返回一个布尔值,因此不能用于从SELECT语句返回结果,或者检查从UPDATE或{{更新的行数。 1}}陈述
    3. 这真的是这一切的方式,还是有一些方法可以逃避在DELETE中使用的值或从odbc_exec()获取结果?

      对于上述两难困境,PHP文档似乎没有任何解决方案。

      感谢您的时间。

2 个答案:

答案 0 :(得分:5)

您正在运行的查询的资源由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
}

答案 1 :(得分:3)

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

想象一下准备好的语句,好像它们是您在SQL中定义的函数/过程,然后使用该资源“调用”该函数。

来自here的示例:

<?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
}
?>