需要PHP PDO的一些解释......!

时间:2012-10-05 04:18:10

标签: php mysql sql pdo

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 );为什么使用双列?

5 个答案:

答案 0 :(得分:3)

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

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

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

你为什么要这样做? PDO允许使用预处理语句,并且它的绑定有助于抽象出必须转义变量的字符串,就像你只是将$ actor_id连接到SQL字符串一样。

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

答案 1 :(得分:2)

:colunm_name用作占位符,就像?一样。

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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:1)

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

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

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

第二部分..

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

这是因为您的定义针对 PDO 中的特定对象。

答案 4 :(得分:0)

请通过this教程了解PDO的基础知识。