2013-09-24 8 views
2

Я прочитал PHP PDO Book и теперь имеют некоторые основные вопросы:PHP PDO - Понимание для начинающих

  1. Если я правильно понял, то я должен буду использовать begin_transaction() для того, чтобы выключить AutoCommit. Если я в порядке с autocommit, я всегда схожу с простым query()
    Правильно ли это?

  2. Правильно ли я понял, что в основном нет разницы между query() и exec(), за исключением вышеуказанной темы?

  3. Я сделал запрос, как это:

    foreach ($db->query('SELECT * from user') as $row) { 
        $row = json_encode($row); 
        echo $row; 
    } 
    

который возвращает JSON объект:

{ 
    "alias":"tk", 
    "0":"tk", 
    "password":"pw", 
    "1":"pw", 
    } 

Это в основном правильно, однако, почему каждое значение возвращается в два раза, один раз с моим выбранным ключевым словом и в другое время с ключом Integer?

+2

Установите свой 'fetchmode', как вы этого хотите. – Wrikken

+0

Почему, по вашему мнению, существует разница для вышеупомянутой темы? –

+0

@YourCommonSense Угадайте, что моя конструкция предложения вводит в заблуждение, извините. То, что я хотел спросить, заключается в следующем: я прав, что я могу использовать оба метода одинаково, expet из того факта, что excec() используется только для неавтоматических заявлений? – user2422960

ответ

2

Почему каждое значение возвращается дважды, один раз с моим выбранным ключевым словом и в другое время с ключом Integer?

Массив имеет значения как с именами столбцов в качестве ключей, и ординалы колонки тоже. Таким образом, вы можете получить доступ к значениям из набора результатов, используя номер нужного столбца. (конечно, это, похоже, не очень полезно с заявлением select * ...)

Вы можете повлиять на поведение пользователя PDOStatement::setFetchMode(). Здесь применимы константы, начинающиеся с PDO::FETCH_. Their documentation can be found here

Смежные вопросы