mysql_query сохраняют тип данных, созданный в таблице по возврату?

У меня есть таблица в mysql:

CREATE TABLE user (id INT, name VARCHAR(250));

Я запрашиваю таблицу:

$result = mysql_query("SELECT id,name FROM user");

Я собираю результаты:

while($row = mysql_fetch_assoc($result) $rv[] = $row;

И я возвращаю данные:

echo json_encode($rv);

Проблема состоит в том, что идентификатор возвращается как строка и не интервал, даже перед json_encode. Если я вызываю $row ['идентификатор'] = (международный) $row ['идентификатор']; - это хорошо работает.

Как я могу вынудить mysql возвратить правильный тип данных в $row?

10x.

5
задан aviv 23 February 2010 в 09:41
поделиться

2 ответа

В документах указано, что только статические экземпляры StandardAnalyzer безопасны для потоков. QuureParser совпадает.

-121--5085943-
>>> import re

>>> re.match("[a-zA-Z][\w-]*$","A")
<_sre.SRE_Match object at 0x00932E20>

>>> re.match("[a-zA-Z][\w-]*$","A_B")
<_sre.SRE_Match object at 0x008CA950>

>>> re.match("[a-zA-Z][\w-]*$","0A")
>>> 
>>> re.match("[a-zA-Z][\w-]*$","!A_B")
>>>

Примечание : упомянутая OP последовательностей не может начинаться с (0-9 и "_"). , очевидно _ может быть в тексте. Вот почему я использую \w

Note2 : Если вы не хотите совпадать окончания строки с \n , вы можете использовать \Z вместо $ как Джон

-121--4320878-

PDO- > bindColumn может ли этот

$stmt = $dbh->prepare($sql);

$stmt->bindColumn('int_col', $intVar, PDO::PARAM_INT);
$stmt->bindColumn('string_col', $strVar, PDO::PARAM_STR);

$stmt->execute();

$stmt->fetch(PDO::FETCH_BOUND);

$ intVar быть автоматически преобразован в int

2
ответ дан 14 December 2019 в 19:11
поделиться

К сожалению, с PHP <= 5.2 функции / классы MySQL (т.е. mysql _ * , mysqli _ * и PDO ) основаны на libmysql - библиотеке C, которая обеспечивает поддержку связи с сервером MySQL.

Функции, использующие эту библиотеку, всегда возвращают строки, даже для целочисленных столбцов и столбцов с плавающей запятой - и вы ничего не можете с этим поделать: единственное решение - иметь некоторый «слой отображения» (например, ORM) , который на стороне PHP «знает», какого типа должен быть каждый столбец, и будет выполнять преобразование каждый раз, когда какие-то данные извлекаются из базы данных.

Примечание: способ вставки данных ничего не меняет в отношении того факта, что вы получаете строки при извлечении данных из БД.


С PHP> = 5.3 функции, которые взаимодействуют с сервером MySQL, могут использовать mysqlnd (собственный драйвер MySQL) вместо libmysql - однако это должно быть настроено во время компиляции.

И возможность взаимодействовать с «родными» типами данных при определенных обстоятельствах - одна из приятных вещей, которые предоставляет mysqlnd; об этом должна быть пара интересных сведений в этой статье: PHP: новый сетевой трафик, экономия ресурсов ЦП и памяти с помощью mysqlnd .


Для краткости:

  • В PHP 5.2 вы получаете только строки из базы данных; и вам придется сделать некоторую конверсию типов самостоятельно
  • С PHP 5.3 вы можете получить собственные типы данных - по крайней мере, в некоторых случаях.
3
ответ дан 14 December 2019 в 19:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: