需要一些帮助来理解下面的示例代码来连接和检索数据库中的数据usind odbc。我理解sql查询..这不是问题
function getObject($query, $params, &$output)
{
global $connect;
$result = odbc_prepare($connect, $query);
odbc_execute($result, $params);
$j=0;
while($object = odbc_fetch_array($result))
{
$output[$j++] = $object;
}
}
function _getDeviceByIdentification($identification)
{
$query =
"SELECT * FROM Device"
." WHERE Identification = ?'".$identification."'";
$params = array(
$identification);
getObject($query, $params, $ret);
return $ret;
答案 0 :(得分:1)
您的查询不正确。不要在查询中传递值,即占位符?
的用途。
function _getDeviceByIdentification($identification) {
$query = "SELECT * FROM Device WHERE Identification = ?";
$params = array($identification);
getObject($query, $params, $ret);
return $ret;
驱动程序将占位符?
与值(无论$identification
包含的内容)交换,并转义任何特殊字符。
例如,假设你有$identification = "olde' iphone";
。直接将其传递给查询:
$query ="SELECT * FROM Device WHERE Identification = '$identification'";
会产生不正确的查询,因为它出现为:
SELECT * FROM Device WHERE Identification = 'olde' iphone';
^ string closed, the rest of the query is unexpected
然而,当司机看到'
时,它知道要逃脱它。
SELECT * FROM Device WHERE Identification = 'olde\' iphone';
所以'
不再是封装字符。
$params = array($identification);
生成一系列映射到占位符的术语(它们按照它们在数组中显示的顺序映射,以及查询中的下降顺序)。如果您遵循代码执行,您可以看到数组最终在http://php.net/manual/en/function.odbc-execute.php中使用(这实际上是绑定)。