无法理解PDO bindValue并执行

时间:2016-06-09 05:52:14

标签: php mysql pdo

最近我开始学习PDO,我很难理解bindValue的行为并直接用数组执行。

$statement = $db->prepare('SELECT * FROM category WHERE `category_name`=?');
$statement->bindValue(1, 'Swimwear'); // It's okey
$statement->execute();

//direct execute with array
$statement->execute(array('Swimwear')); // It's also okey

但真正的问题是为什么我不必使用像?

$statement->execute(array(1 => 'Swimwear')); // It's not okey, Not working

2 个答案:

答案 0 :(得分:2)

<script src="http://www.highcharts.com/js/themes/gray.js"></script> 不起作用,因为该值应该在索引0中,而不是1.使用此语法时,正确的代码将是:

$statement->execute(array(1 => 'Swimwear'));

虽然我在$statement->execute(array(0 => 'Swimwear')); 上使用这种复杂的语法没有任何意义。

答案 1 :(得分:0)

使用PDO,您可以通过三种方式添加占位符值。

您可以使用bindValue单独添加它们。

您可以将它们添加到一个简单的数组中。

如果您已将命名为,则可以使用关联数组添加它们。

因此,要使该样式生效,您需要为预准备语句添加名称,并向传递给execute的数组添加名称:

$statement = $db->prepare('SELECT * FROM category WHERE `category_name`=:category');
$statement->execute(array(':category' => 'Swimwear'));

没有名为1的占位符,因此无效。

bindValue()函数采用1索引值,这就是bindValue(1, 'Swimwear')调用有效的原因。这是通常的0索引编程规则的一个例外。

要使其与关联样式一起使用,您需要以这种方式调用它:

$statement->execute(array(0 => 'Swimwear'));