在網絡搜索後,最終通過擴展PDOStatement
類來解決以下問題。請記住這個學分在SE
和其他網絡來源。
class CustomPDOStatement extends PDOStatement
{
public $removeNulls = FALSE;
public $dbh;
protected function __construct($dbh)
{
$this->dbh = $dbh;
}
public function execute($input_parameters = null)
{
if ($this->removeNulls === TRUE && is_array($input_parameters)) {
foreach ($input_parameters as $key => $value) {
if (is_null($value)) {
$input_parameters[$key] = '';
}
}
}
return parent::execute($input_parameters);
}
public function bindValue($parameter, $value, $data_type = PDO::PARAM_STR)
{
if ($this->removeNulls === TRUE && is_null($value)) {
$value = '';
}
return parent::bindValue($parameter, $value, $data_type);
}
public function bindParam($parameter, &$variable, $data_type = PDO::PARAM_STR, $length = null, $driver_options = null)
{
if ($this->removeNulls === TRUE && is_null($variable)) {
$variable = '';
}
parent::bindParam($parameter, $variable, $data_type, $length, $driver_options);
}
}
雖然插入或更新我在做這樣的
$insertUser = $pdoDB->prepare("INSERT INTO users (id,email,name,age) VALUES (:id, :email, :name, :age)");
$insertUser->removeNulls = TRUE;
$insertUser->bindValue(':id', $id);
$insertUser->bindValue(':email', $email);
$insertUser->bindValue(':name', $name);
$insertUser->bindValue(':age', $age); // May be NULL
$insertUser->execute();
通過傳遞array
作爲參數傳遞給避免removeNulls
值綁定了太多的檢查。
參照以下來源
- Extending PDO class得到這個想法。
- Extending PDOStatement class和this。
- 網絡的其他來源。
你能提供一個你如何插入數據的例子嗎? – Ukuser32