sql >> データベース >  >> RDS >> Mysql

DEFAULT値を使用したMySQLINSERT/UPDATEステートメントの準備

    これについて私が知っている唯一の「回避策」は、 Coalesce() および Default(fieldname)

    例:

    $pdo = new PDO("mysql:host=localhost;dbname=test", 'localonly', 'localonly'); 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    $pdo->exec("
      CREATE TEMPORARY TABLE foo (
        id int auto_increment,
        x int NOT NULL DEFAULT 99,
        y DATETIME NOT NULL DEFAULT '2010-03-17 01:00:00',
        z varchar(64) NOT NULL DEFAULT 'abc',
        primary key(id)
      )
    ");
    
    
    $stmt = $pdo->prepare('
      INSERT INTO
        foo
        (x,y,z)
      VALUES
        (
          Coalesce(:x, Default(x)),
          Coalesce(:y, Default(y)),
          Coalesce(:z, Default(z))
        )
    ');
    $stmt->bindParam(':x', $x);
    $stmt->bindParam(':y', $y);
    $stmt->bindParam(':z', $z);
    
    
    $testdata = array(
      array(null, null, null),
      array(1, null, 'lalala'),
      array(null, '2009-12-24 18:00:00', null)
    );
    foreach($testdata as $row) {
      list($x,$y,$z) = $row;
      $stmt->execute();
    }
    unset($stmt);
    foreach( $pdo->query('SELECT id,x,y,z FROM foo', PDO::FETCH_NUM) as $row) {
      echo join(', ', $row), "\n";
    }
    

    プリント

    1, 99, 2010-03-17 01:00:00, abc
    2, 1, 2010-03-17 01:00:00, lalala
    3, 99, 2009-12-24 18:00:00, abc
    


    1. デフォルトのMySQLデータベース名

    2. Node.jsでSequelizeを使用して結合クエリを作成する方法

    3. SQL Serverプロファイラーに相当するPostgreSQLはありますか?

    4. より効率的な階層システム