PHP命名参数
嗨,我是php新手,我在命名参数方面遇到了困难。 我正在学习“Murach的php和sql手册” 这是我问题中的代码PHP命名参数,php,Php,嗨,我是php新手,我在命名参数方面遇到了困难。 我正在学习“Murach的php和sql手册” 这是我问题中的代码 $query = 'SELECT productCode, productName, listPrice FROM products WHERE productID = :product_id'; $statement = $db->prepare($query); $statement->bindValue(':produ
$query = 'SELECT productCode, productName, listPrice
FROM products
WHERE productID = :product_id';
$statement = $db->prepare($query);
$statement->bindValue(':product_id', $product_id);
$statement->execute();
$product = $statement->fetch();
$statement->closeCursor();
所以我所有的困惑都围绕着“productID=:product_id';”这意味着什么?我不明白。通常我们在那里设置条件,比如productID<100或者类似的。所以它给出了所有值小于100的ProductID,对吗?那这是怎么回事?我的意思是,我没有看到这个命名参数在其他任何地方被赋值。这是本书中的一个例子。或者,在实际程序中,我们为命名的参数变量赋值,以便它提供适当的结果?如果这听起来很愚蠢,请帮助我并原谅我,因为我对这一点完全不熟悉。行
$statement->bindValue(':product\u id',$product\u id)
将用php变量$product\u id
中的值替换SQL语句中的:product\u id
这与说productID='somevalue'中的相同,只是PHP将为您填写somevalue
它内置于PHP中,用于准备语句。由于PHP和数据库是两种不同的东西,他们为PHP构建了一种与数据库对象交互的方法,称为PDO(PHP数据对象),这基本上是一组从PHP内部与数据库交互的方法。bindValue(上面链接)是MySQL PDO向MySQL语句中添加变量的方法。您过度考虑了命名参数。把它看作一个占位符。它本质上只是变量传递到服务器后指向的引用
通过分别传递查询和数据(绑定),使用准备好的语句从本质上减轻了SQL注入
一旦解析到服务器,它将用$product\u id
中的值替换:product\u id
你最好仔细阅读,以便更好地理解实际发生的事情
您还应该阅读:发生的事情是数据库能够缓存和优化查询,它还用于防止SQL注入:
SELECT productCode, productName, listPrice FROM products WHERE productID = :product_id
如果必须传入这样的变量,则必须解析并重新缓存该查询,因为$product_id(因为它可能是一个变量号):
如果$product\U id未正确转义,则有人可以将$product\U id设置为123;删除表格产品
,这将删除表格(坏)
因此,当运行需要来自用户输入的值的查询时,发生的绑定意味着使事情更加高效和安全。它正在搜索产品id
=
$product\u id
所在的确切产品。如果你愿意,你可以在哪里做productID<:product\u id
。谢谢你的回复,但我还是很困惑,你能再解释一下吗?该命名参数的值是多少?这是我们稍后分配给$product\U id变量的东西吗?在这个语句$statement->bindValue(':product\U id',$product\U id)中代码>。将$product\U id
的值指定给:product\U id
。示例中没有为$product\U id
指定值的步骤。在实际的程序中,您会为其指定一个值。这一步骤的必要性有望在本书的前几部分中得到阐述。你可能想重读,或者用一些更基本的东西重读syst。非常感谢你救了我一天。所以我假设在程序中的某个地方,变量“$product_id”被赋值,并被传递到指定的参数:product_id”对吗?
SELECT productCode, productName, listPrice FROM products WHERE productID = $product_id