最近我开始学习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
答案 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'));