MySQL / PHP - будет ли расставлять кавычки вокруг цифр какие-либо запросы? - PullRequest
1 голос
/ 22 июля 2010

Я хочу иметь общую функцию PHP, которая создает запрос mysql на основе параметров функции.Поскольку он является общим, запрос может иногда запрашивать id = 123 или name = 'Bob'.Я тестировал некоторые запросы с кавычками вокруг чисел, даже такие вещи, как WHERE id > '50' + 7, и это работало, но у меня есть сомнения, что это не вызовет проблем в будущем.Я предполагаю, что если это действительно универсальная функция, то она должна обрабатывать даты и любые другие типы данных.Итак, что было бы лучшим способом безопасно сформировать эти запросы?

Ответы [ 3 ]

5 голосов
/ 22 июля 2010

Кавычки вокруг значений подходят для любого типа, если ваш запрос придерживается mySQL. Способ обработки значений будет зависеть от типа поля, с которым сравнивается. При необходимости они будут конвертированы автоматически.

Кроме того, вы можете обратиться к оберткам базы данных, которые предлагают готовые операторы, такие как PDO . Помимо других преимуществ, они сами позаботятся о цитировании и экранировании входящих данных.

Пример из руководства :

<?php
/* Execute a prepared statement by binding PHP variables */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour');
$sth->bindValue(':calories', $calories, PDO::PARAM_INT);
$sth->bindValue(':colour', $colour, PDO::PARAM_STR);
$sth->execute();
?>
1 голос
/ 12 ноября 2013

Пустые кавычки во вставках mysql действуют так, как будто они интерпретируются как строковые значения.

Если вы используете функцию для генерации вставки для столбца mysql INT и в итоге получаете

IntColumn = ''

вы можете получить ошибку типа.

ОШИБКА 1366: 1366: Неверное целочисленное значение: '' для столбца IntColumn в строке 1

Вы захотите отфильтровать столбцы INT с пустым значением или поставить пустые кавычки вместо пустых кавычек.

IntColumn = null

1 голос
/ 22 июля 2010

Никакие кавычки не наносят вреда ни одному из типов данных.Потому что движок mysql преобразует его в тип данных соответствующих столбцов.

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