PHP 中类型未知的 SQL 查询


SQL Query in PHP with unknown type

我想存储一个值,它有时是字符串,有时是整数。(在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'";

我怎样才能让它在一般情况下工作?最好在一个查询中。

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));

一列只能有一种类型。因此,将列定义为varchar并每次都使用引号。

更好的解决方法是使用预准备语句。