Как получить числовые типы от MySQL с помощью PDO?

Возможно, пример кода помог бы, я собираюсь использовать C#, но необходимо быть в состоянии следовать вперед.

Позволяет, притворяются, что у нас есть интерфейс, названный IPayable

public interface IPayable
{
    public Pay(double amount);
}

Теперь, у нас есть два реальных класса, которые реализуют этот интерфейс:

public class BusinessAccount : IPayable
{
    public void Pay(double amount)
    {
        //Logic
    }
}

public class CustomerAccount : IPayable
{
    public void Pay(double amount)
    {
        //Logic
    }
}

Теперь, позволяет, притворяются, что у нас есть набор различных учетных записей, чтобы сделать это мы будем использовать универсальный список IPayable

List<IPayable> accountsToPay = new List<IPayable>();
accountsToPay.add(new CustomerAccount());
accountsToPay.add(new BusinessAccount());

типа Теперь, мы хотим зачислить 50,00$ на все те счета:

foreach (IPayable account in accountsToPay)
{
    account.Pay(50.00);
}

Поэтому теперь Вы видите, как интерфейсы невероятно полезны.

Они используются на инстанцированных объектах только. Не на статических классах.

, Если Вы сделали плату статичной, когда цикличное выполнение через IPayable's в accountsToPay там не будет никаким способом выяснить, должно ли это назвать плату на BusinessAcount или CustomerAccount.

61
задан halfer 30 June 2015 в 19:58
поделиться

2 ответа

Я не думаю, что иметь "числа" можно в PHP 5.2 : - (

В PHP 5.3 это становится возможным, если я правильно помню, когда вы используя новый драйвер (новый, как в PHP> = 5.3) mysql nd (MySQL Native Driver) драйвер.

Итак, покопавшись в моих закладках, я нашел это статья о mysqlnd: PDO_MYSQLND: Новые возможности PDO_MYSQL в PHP 5.3

В нем говорится следующее (цитата):

Преимущества использования mysqlnd для PDO

mysqlnd возвращает собственные типы данных, когда используя подготовленные операторы на стороне сервера, например, возвращается столбец INT как целочисленная переменная, а не как строка. Это означает меньше данных преобразование внутри.

Но это только PHP 5.3 (при условии, что ваша версия PHP 5.3 скомпилирована с mysqlnd (, а не старой libmysql) ), и, похоже, только для подготовленных операторов :-(

Извините ...

Решением было бы иметь на стороне PHP систему отображения (например, ORM - см. Доктрина ; просто как пример ORM: Я не знаю, выполняет ли он то, о чем вы просите) для преобразования результатов, поступающих из БД, в типы данных PHP ...

И да, это плохо, если вы хотите использовать такие операторы, как ] === и ! == , которые зависят от типа ...

39
ответ дан 24 November 2019 в 17:10
поделиться

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

new PDO($dsn, $user, $pass, array(
    PDO::ATTR_EMULATE_PREPARES => false
))

PDO :: ATTR_STRINGIFY_FETCHES не имеет отношения к MySQL.

посмотрите на светлую сторону, в любом случае рекомендуется использовать подготовленные операторы, так что ...;)

64
ответ дан 24 November 2019 в 17:10
поделиться
Другие вопросы по тегам:

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