我在PHP中使用ODBC扩展来连接到SQL 2000服务器。以下是我的反对意见:
odbc_exec()
或odbc_execute()
在我看来,这两种查询执行方法之间的差异几乎与夜晚不同:
odbc_exec()
将执行非SQL安全查询并返回查询结果odbc_execute()
与odbc_prepare()
结合使用,可以对数据库执行SQL安全查询。但是,odbc_execute()
只能返回一个布尔值,因此不能用于从SELECT
语句返回结果,或者检查从UPDATE
或{{更新的行数。 1}}陈述这真的是这一切的方式,还是有一些方法可以逃避在DELETE
中使用的值或从odbc_exec()
获取结果?
对于上述两难困境,PHP文档似乎没有任何解决方案。
感谢您的时间。
答案 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
}
?>