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 );
为什么使用双列?
答案 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的基础知识。