2
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 );为什么使用双列中的相同内容?

4

5 回答 5

3

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

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

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

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

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

于 2012-10-05T04:21:05.783 回答
2

:colunm_name用作占位符,就像?.

不同之处在于:column_name您可以使用关联数组来绑定参数。

于 2012-10-05T04:22:03.963 回答
1

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

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

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

于 2012-10-05T04:41:23.477 回答
1

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

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

该语句使用了一些类似于变量调用占位符的方法,通过使用:冒号,您可以将变量解析为 sql。

第二部分..

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

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

于 2012-10-28T07:20:22.020 回答
0

请阅读教程以了解 PDO 的基础知识。

于 2012-10-05T04:24:35.320 回答