Я пытаюсь вставить логическое значение с PDO в базу данных MySQL.Если $data['age2']
равно false
, вставка не происходит, но если true
, то это работает.Если я использую метод ->bindParam()
, он снова работает.Но если бы это было возможно, я бы передавал свои переменные в ассоциативный массив.У вас есть представление, что я делаю неправильно.в нижней части кода я также вставил код для создания таблицы (я хочу вставить в).спасибо
<?php
$host = 'localhost';
$user = 'root';
$password = '12345';
$dbName = 'pdo';
// set DSN data sorce name
$dsn = "mysql:host={$host};dbname={$dbName}";
// create pdo instance
$pdoConn = new PDO($dsn, $user, $password);
$pdoConn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
$data = [
':fname' => 'Bob',
':sname' => 'Desaunois',
':age' => '18',
':age2' => true
];
$sql = 'INSERT INTO posts (title, body, author, is_published) VALUES (:fname, :sname, :age, :age2)';
$statement = $pdoConn->prepare($sql);
$statement->execute($data);
/*
SHOW CREATE TABLE posts;
'posts', 'CREATE TABLE `posts` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `title` char(255) NOT NULL,\n `body` text NOT NULL,\n `author` char(255) NOT NULL,\n `is_published` tinyint(1) DEFAULT \'0\',\n `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB AUTO_INCREMENT=150 DEFAULT CHARSET=latin1'
posts, CREATE TABLE `posts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` char(255) NOT NULL,
`body` text NOT NULL,
`author` char(255) NOT NULL,
`is_published` tinyint(1) DEFAULT '0',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=150 DEFAULT CHARSET=latin1
*/