Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP命名参数_Php - Fatal编程技术网

PHP命名参数

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

嗨,我是php新手,我在命名参数方面遇到了困难。 我正在学习“Murach的php和sql手册” 这是我问题中的代码

$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