Php PDO::PDO语句中的PARAM_INT::execute
有没有办法在Php PDO::PDO语句中的PARAM_INT::execute,php,mysql,pdo,prepared-statement,Php,Mysql,Pdo,Prepared Statement,有没有办法在PDOStatement::execute中指定PDO::PARAM_INT 我习惯于做以下事情 $STH = $DBH->prepare('INSERT INTO items (name, description) VALUES (:name, :description)'); $STH->execute(array(':name' => $name, ':description' => $description)); 但是,有时插入的值必须是整数 我知道
PDOStatement::execute
中指定PDO::PARAM_INT
我习惯于做以下事情
$STH = $DBH->prepare('INSERT INTO items (name, description) VALUES (:name, :description)');
$STH->execute(array(':name' => $name, ':description' => $description));
但是,有时插入的值必须是整数
我知道可以使用bindValue
或bindParam
$STH->bindParam(':price', $price, PDO::PARAM_INT);
然而,我想要的是:
$STH->execute(array(':price' => array('value' => $price, 'type' => PDO::PARAM_INT)));
这是否存在?下面的例子,它们正是你想要做的 旁注:我将此作为一个社区维基答案发布,因为我确实从现有代码中提取了它们
bindValue()
,从:
对于bindParam()
,从:
下面的例子,正是你想要做的 旁注:我将此作为一个社区维基答案发布,因为我确实从现有代码中提取了它们
bindValue()
,从:
对于bindParam()
,从:
只需要一个参数-一个$input\u参数数组
,因此您需要明确使用bind*
函数。为什么不在验证过程中确保它是一个整数?手册中有一些示例就是为了满足您的要求而制作的,您没有看到/尝试过它们吗?@Fred ii-我没有。你说的是php.net手册吗?@TT4M.C是的,我在下面发布了一个社区维基答案,你可以看看。只需要一个参数-一个$input_参数数组
,因此您需要明确使用bind*
函数。为什么不在验证过程中确保它是一个整数?手册中有一些示例,只是为了满足您的要求,您没有看到/尝试过它们吗?@Fred ii-我没有。你说的是php.net手册吗?@TT4M.C是的,我在下面发布了一个社区维基答案,你可以看看。
/*
method for pdo class connection, you can add your cases by yourself and use it.
*/
class Conn{
....
....
private $stmt;
public function bind($parameter, $value, $var_type = null){
if (is_null($var_type)) {
switch (true) {
case is_bool($value):
$var_type = PDO::PARAM_BOOL;
break;
case is_int($value):
$var_type = PDO::PARAM_INT;
break;
case is_null($value):
$var_type = PDO::PARAM_NULL;
break;
default:
$var_type = PDO::PARAM_STR;
}
}
$this->stmt->bindValue($parameter, $value, $var_type);
}
<?php
/**
* @param string $req : the query on which link the values
* @param array $array : associative array containing the values ??to bind
* @param array $typeArray : associative array with the desired value for its corresponding key in $array
* */
function bindArrayValue($req, $array, $typeArray = false)
{
if(is_object($req) && ($req instanceof PDOStatement))
{
foreach($array as $key => $value)
{
if($typeArray)
$req->bindValue(":$key",$value,$typeArray[$key]);
else
{
if(is_int($value))
$param = PDO::PARAM_INT;
elseif(is_bool($value))
$param = PDO::PARAM_BOOL;
elseif(is_null($value))
$param = PDO::PARAM_NULL;
elseif(is_string($value))
$param = PDO::PARAM_STR;
else
$param = FALSE;
if($param)
$req->bindValue(":$key",$value,$param);
}
}
}
}
/**
* ## EXEMPLE ##
* $array = array('language' => 'php','lines' => 254, 'publish' => true);
* $typeArray = array('language' => PDO::PARAM_STR,'lines' => PDO::PARAM_INT,'publish' => PDO::PARAM_BOOL);
* $req = 'SELECT * FROM code WHERE language = :language AND lines = :lines AND publish = :publish';
* You can bind $array like that :
* bindArrayValue($array,$req,$typeArray);
* The function is more useful when you use limit clause because they need an integer.
* */
?>