嗨,我是新的php,我正面临困难的命名参数。我正在学习表格"Murach's php and sql book“这是我问题中的代码,
$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();因此,我所有的困惑都围绕着"WHERE productID =:productID“;这意味着什么?我不明白这一点。通常,我们在那里创造条件,比如productID < 100或类似的情况。因此,它给出了所有值小于100的产品it,对吗?那这是怎么回事?我的意思是,我没有看到这个命名的参数在任何其他地方都被赋值。这是书中的一个例子。还是在实际程序中,我们给命名的参数变量赋值,以便它能够提供适当的结果?请帮助我,如果这听起来很愚蠢,请原谅,因为我对这件事完全陌生。
发布于 2016-01-07 02:06:38
行$statement->bindValue(':product_id', $product_id);将用php变量$product_id中的值替换SQL语句中的:product_id。
这和说WHERE productID = 'somevalue'是一样的,只是PHP会为您填写一些内容。
这是在PHP中内置的,用于准备语句,请看这里。因为PHP和数据库是两种不同的东西,所以他们为PHP构建了一种与名为PDO (PHP数据对象)的数据库对象交互的方法,这基本上是一组从PHP内部与数据库交互的方法。bindValue (链接在上面)是将变量添加到MySQL状态的MySQL PDO方法。
发布于 2016-01-07 02:07:42
你想得太多了。把它当作占位符。从本质上说,它只是变量在传递到服务器后要指向的引用。
使用准备好的语句实际上是通过分别传递查询和数据(绑定)来减少SQL注入。
一旦解析到服务器,它将用:product_id中的值替换$product_id。
最好阅读一下准备好的陈述,以便更好地了解实际发生的事情。
您还应该阅读:我什么时候应该使用准备好的报表?
发布于 2016-01-07 02:08:00
正在发生的情况是,数据库能够缓存和优化查询,它还用于防止SQL注入:
SELECT productCode, productName, listPrice FROM products WHERE productID = :product_id如果您必须传入这样的变量,那么由于$product_id (因为它可以是变量号),必须解析和重新缓存该查询:
SELECT productCode, productName, listPrice FROM products WHERE productID = $product_id如果$product_id不能正确地转义,有人可以将$product_id设置为123; DROP table products,这将删除您的表(坏)。
因此,当运行需要用户输入值的查询时,发生的绑定将使事情更加高效和安全。
https://stackoverflow.com/questions/34646143
复制相似问题