Почему мой оператор SELECT возвращает имя базы данных как имя столбца ?! (новичок в pdo) - PullRequest
2 голосов
/ 06 апреля 2011

Привет и спасибо за чтение.

Я новичок в php (но я уже давно программирую), поэтому я решил использовать интерфейс pdo в качестве стартового для моих запросов к базе данных.Я поставил небольшой скрипт для тестирования, но он возвращает имя базы данных как имя одного из столбцов.Зачем?

Также для вас, pdo профессионалы, как только я создаю новый объект pdo без указания имени базы данных, как я могу выбрать его, чтобы предотвратить запись "databaseName.tableName" в моих запросах ... Смотрите мой скрипт ниже: <pre> <p>try { $dbh = new PDO('mysql:host=localhost', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); } catch (Exception $e) { echo 'Erreur : ' . $e->getMessage() . '<br />'; echo 'N° : ' . $e->getCode(); die(); }</p> <p>$sth = $dbh->prepare("CREATE DATABASE IF NOT EXISTS myTest DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci"); $sth->execute();</p> <p>$sth = $dbh->prepare("CREATE TABLE IF NOT EXISTS myTest.user( personID int NOT NULL AUTO_INCREMENT, PRIMARY KEY(personID), FirstName varchar(15), LastName varchar(15), Age int(3) )"); $sth->execute();</p> <p>$sth = $dbh->prepare("INSERT INTO myTest.user (FirstName, LastName, Age) VALUES(?, ?, ?)"); $sth->execute(array("Charles", "Gagnon", "28"));</p> <p>$sth = $dbh->query("SELECT * FROM myTest.user"); $result = $sth->fetch(PDO::FETCH_ASSOC);</p> <p>$json = json_encode($result); print_r($json);</p> <p>?>

Так что да, print_r выводит этот json:

{"personID":"1","FirstName":"Charles","user":"28"}

Довольно странно, он выводит имя таблицы (пользователя) вместо «Age» и LastNameполя там вообще нет ...

Любая помощь будет оценена, спасибо!

1 Ответ

1 голос
/ 06 апреля 2011

Не может повторить это.Используя ваш точный код, я получаю

{"personID":"1","FirstName":"Charles","LastName":"Gagnon","Age":"28"}

Вы уверены, что база данных myTest и таблица user еще не существуют с схемой, отличной от той, которую вы ожидаете (но все же как-то до сих порработает для оператора INSERT)?

Редактировать: ваш оператор вставки не будет работать, если схема будет другой.

Такжедля вас, pdo профессионалы, как только я создаю новый объект pdo без указания имени базы данных, как я могу выбрать его, чтобы предотвратить запись "databaseName.tableName"

Просто восстановите объект PDO, указавdbname параметр в DSN.В противном случае, я полагаю, вы могли бы попытаться выполнить команду use <database>;.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...