检索和保存数据

时间:2017-11-14 13:12:28

标签: php mysql odbc

需要一些帮助来理解下面的示例代码来连接和检索数据库中的数据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;

1 个答案:

答案 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中使用(这实际上是绑定)。