Php 在pdo中绑定多个值

Php 在pdo中绑定多个值,php,pdo,bind,Php,Pdo,Bind,有没有一种简单的方法可以在PDO中绑定多个值而无需重复?请看下面的代码: $result_set = $pdo->prepare("INSERT INTO `users` (`username`, `password`, `first_name`, `last_name`) VALUES (:username, :password, :first_name, :last_name)"); $result_set->bindValue(':username', '~user'); $

有没有一种简单的方法可以在PDO中绑定多个值而无需重复?请看下面的代码:

$result_set = $pdo->prepare("INSERT INTO `users` (`username`, `password`, `first_name`, `last_name`) VALUES (:username, :password, :first_name, :last_name)");

$result_set->bindValue(':username', '~user');
$result_set->bindValue(':password', '~pass');
$result_set->bindValue(':first_name', '~John');
$result_set->bindValue(':last_name', '~Doe');

$result_set->execute();

在这里,我以4次重复的方式绑定值。那么PDO中有没有一种简单的绑定多个值的方法?

如果您想基于类型(字符串、int等)进行绑定,那么没有。如果您可以将所有内容绑定为字符串:

$stmt = $db->prepare("...");
$stmt->execute(array(
    'foo' => 'bar',
    'something' => 'else',
    'third' => 'thing',
));

如果要基于类型(字符串、int等)进行绑定,则不需要。如果可以将所有内容绑定为字符串:

$stmt = $db->prepare("...");
$stmt->execute(array(
    'foo' => 'bar',
    'something' => 'else',
    'third' => 'thing',
));

只要您不介意将值视为
PDO::PARAM_STR
(字符串),就可以始终在
execute()
的参数中绑定值

您可以像使用任何数组一样使用传递的数组:

$user = "Nile";
$pdo->execute(array(":user" => $user));

只要您不介意将值视为
PDO::PARAM_STR
(字符串),就可以始终在
execute()
的参数中绑定值

您可以像使用任何数组一样使用传递的数组:

$user = "Nile";
$pdo->execute(array(":user" => $user));

要真正做到不重复键入任何内容,可以使用数组提供数据,并使用同一数组上的函数输出MySQL查询的绑定部分。例如:

function bindFields($fields){
    end($fields); $lastField = key($fields);
    $bindString = ' ';
    foreach($fields as $field => $data){ 
        $bindString .= $field . '=:' . $field; 
        $bindString .= ($field === $lastField ? ' ' : ',');
    }
    return $bindString;
}
数据和列名来自单个关联数组(
$data
)。然后,使用
bindFields($data)
生成一个
column=:column
对字符串,以连接到MySQL查询中:

$data = array(
    'a_column_name' => 'column data string',
    'another_column_name' => 'another column data string'
);

$query = "INSERT INTO tablename SET" . bindFields($data);

$result = $PDO->prepare($query);
$result->execute($data);
bindFields($data)
输出:

 a_column_name=:a_column_name,another_column_name=:another_column_name 

要真正做到不重复键入任何内容,可以使用数组提供数据,并使用同一数组上的函数输出MySQL查询的绑定部分。例如:

function bindFields($fields){
    end($fields); $lastField = key($fields);
    $bindString = ' ';
    foreach($fields as $field => $data){ 
        $bindString .= $field . '=:' . $field; 
        $bindString .= ($field === $lastField ? ' ' : ',');
    }
    return $bindString;
}
数据和列名来自单个关联数组(
$data
)。然后,使用
bindFields($data)
生成一个
column=:column
对字符串,以连接到MySQL查询中:

$data = array(
    'a_column_name' => 'column data string',
    'another_column_name' => 'another column data string'
);

$query = "INSERT INTO tablename SET" . bindFields($data);

$result = $PDO->prepare($query);
$result->execute($data);
bindFields($data)
输出:

 a_column_name=:a_column_name,another_column_name=:another_column_name 

如果我将
bar
更改为
$bar
并在其中分配了一个
'bar'
字符串,这对变量有效吗?如果我将
bar
更改为
$bar
并在其中分配了一个
'bar'
字符串,这对变量有效吗?我最初将其作为单独的问题/答案发布()在找到此问题之前,但现在已将其标记为重复。在找到此问题之前,我最初将其作为单独的问题/答案()发布,但现在已将其标记为重复。这如何有效?
execute
方法不接受任何参数?@Brett您检查过规格了吗?它确实。。。要将参数传递给查询,您可以使用以下两种方法之一。我的错,我以为您在说。这怎么有效?
execute
方法不接受任何参数?@Brett您检查过规格了吗?它确实。。。要将参数传递给查询,您可以使用以下两种方法之一。我的错,我以为您在谈论。