SQL-запрос в PHP с неизвестным типом

Я хотел бы сохранить значение, которое иногда является строкой, иногда целым числом. (В PHP и MySQL)

Переменные настроены так:

$userID = 123; // Unique primary key, always a number
$name = "nameOfTheProperty"; // Always a string
$value = "someText" or 1234; // Depending on the property to save

Это работает, если его целочисленное свойство:

$sql = "INSERT INTO saves (`User_ID`, `$name`) VALUES ($userID, $value) ON DUPLICATE KEY UPDATE `$name`=$value";

И это если его строковое свойство:

$sql = "INSERT INTO saves (`User_ID`, `$name`) VALUES ($userID, '$value') ON DUPLICATE KEY UPDATE `$name`='$value'";

Как я могу заставить это работать вообще? Лучший в одном запросе.

0

Решение

MySQL не волнует, если вы передадите ‘строку’ в числовое поле:

INSERT INTO (intfield, charfield) VALUES ('42', '42')

вставил бы 42 в оба поля.

Однако то, что вы делаете, в основном уязвимо для атак с использованием SQL-инъекций. Вы должны использовать подготовленное заявление и заполнители. К сожалению, заполнители не могут представлять ничего, кроме VALUES, поэтому вам все равно нужно динамически создавать часть вашего запроса, например,

$safefield = $db->real_escape_string('nameOfField');

$sql = "INSERT INTO yourtable (`$safefield`) VALUES (?)";
$stmt = $db->prepare($sql);
$stmt->execute(array($value_for_field));
2

Другие решения

Столбец может иметь только один тип. Так определите столбец как varchar и используйте кавычки каждый раз.

Лучшее решение — использовать подготовленные заявления.

1

По вопросам рекламы [email protected]