webcode-labサイトロゴ

  • お問い合わせへのリンクバナー

Webcode Laboratory
for website coding & program & seo;

Topics

この Blog CMS について
PHP×MySQL|PDOでプレースホルダに動的にNULLをセットしカラムに入れたい eyecatch画像

PHP×MySQL|PDOでプレースホルダに動的にNULLをセットしカラムに入れたい

rss

PHPでPDOを利用して、bindValueで値をパラメータにバインドする際、動的にカラムに「NULL」を入れたい場合に、少しハマったので備忘録です。

 

PDOでプレースホルダにNULLをSETしカラムに入れたい

 

PDOを利用し、INSERT・UPDATE・REPLACE等で、bindValueで値をパラメータにバインドする際、
対象が空の場合には動的に、MYSQLのカラムに「0」ではなく「NULL」と入れたいのが目的です。

 

【失敗版】 変数利用 

「NULL」を変数で置き換えてから入れようとしてうまくいきませんでした。

【PHP&PDO(MYSQL)】

// $valueが空の場合の処理
if( ​​​​​​​empty($value) )
{
    $value = null; // (NULLを入れる)
【 OR ↑ どちらもうまくいかない ↓ 】
    $value = 'null'; // (NULLをstringで入れる)
}
$query = "REPLACE INTO sample (datetime_end) VALUES (:value)";
$stmt = $db->prepare($query);
$stmt->bindValue(':value', $value, PDO::PARAM_INT); // ←「null」でなく「0」が入ってしまう
$stmt->execute();

 



​​​​​​​
そこで、いろいろ試した結果以下に落ち着きました。
変数は利用せず、BIND行に直接NULLを入れる方法です。
 

【成功版①】

【PHP&PDO(MYSQL)】

$query = "REPLACE INTO sample (datetime_end) VALUES (:value)";
$stmt = $db->prepare($query);
// $valueが空の場合の処理
if( ​​​​​​​empty($value) )
{
    $stmt->bindValue(':value', null, PDO::PARAM_NULL); // NULLを直接入れる

// $valueが空でない場合の処理
}else
{
    $stmt->bindValue(':value', $value, PDO::PARAM_INT);
}
$stmt->execute();


​​​​​​​
​​​​​​​​​​​​​​もしくはBIND一行にするなら、
 

【成功版②】

【PHP&PDO(MYSQL)】

$query = "REPLACE INTO sample (datetime_end) VALUES (:value)";
$stmt = $db->prepare($query);
$stmt->bindValue(':value', empty($value) ? null : $value, PDO::PARAM_INT); // $valueが空の場合はNULLを直接入れる
$stmt->execute();


あまり「NULL」を入れたい機会はないと思いますが、
​​​​​​​あったら結構ハマるので注意です。


ページの先頭へ

rss
1件目 (1件中)