【问题标题】:Need Some Explanation of PHP PDO....!需要PHP PDO的一些解释......!
【发布时间】:2012-10-05 04:18:10
【问题描述】:
function get_actor_info( $actor_id ) {

    global $pdo;

    $stmt = $pdo->prepare('
            SELECT film_info, first_name, last_name 
            FROM actor_info
            WHERE actor_id = :actor_id
            LIMIT 1');

    $stmt->execute( array( ':actor_id' => $actor_id ) );

    return $stmt->fetch( PDO::FETCH_OBJ );
}

在上面的示例中,为什么 MYSQL 选择 WHERE...:actor_id 后跟这个 : 列和 return $stmt->fetch( PDO::FETCH_OBJ ); 中的相同内容 为什么使用双列?

【问题讨论】:

  • 请停止在您的代码中使用global 变量。

标签: php mysql sql pdo


【解决方案1】:

字符串 :actor_id 不是变量。它是一个将实际变量 $actor_id 值绑定到 SQL 字符串的占位符。

您的 $stmt 字符串是一个带有占位符的查询。

where 子句的实际值在执行时使用 execute() 方法传递。

您为什么要这样做? PDO 允许准备好的语句,它的绑定有助于抽象出必须转义变量的字符串,就像您只是将 $actor_id 连接到 SQL 字符串中一样。

这有助于查询的可重用性和安全性。

【讨论】:

    【解决方案2】:

    :colunm_name 用作占位符,就像?

    区别在于:column_name可以使用关联数组来绑定参数。

    【讨论】:

      【解决方案3】:

      末尾的双冒号完全不同。它是一种独立的符号,与查询中的单个冒号完全无关。

      双冒号表示您要访问在类中定义的常量或函数。如果它是在一个对象中定义的,你会使用更熟悉的-> 表示法;在这种情况下,FETCH_OBJ 是 PDO 类本身的常量,而不是任何特定的 PDO 对象。当您将该常量作为参数传递给fetch() 时,它会告诉函数以对象而不是数组的形式返回一行。

      双冒号称为scope resolution operator。它还被命名为“paamayim nekudotayim”,这是希伯来语中“双冒号”的意思,可能是计算机科学史上最糟糕的命名约定选择之一。

      【讨论】:

        【解决方案4】:

        上面示例中的第一个问题为什么 MYSQL 选择 WHERE... :actor_id 后跟这个:冒号

        $stmt->execute( array( ':actor_id' => $actor_id ) );
        

        这个语句使用了一些类似变量调用占位符,通过使用:冒号你可以将你的变量解析成sql。

        第二部分..

        return $stmt->fetch( PDO::FETCH_OBJ )为什么要用双列?

        这是您的定义,目标是 PDO 中的特定对象。

        【讨论】:

          【解决方案5】:

          请通过this 教程学习 PDO 的基础知识。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多