我想存储一个有时是字符串的值,有时候是一个整数。 (在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 :(得分:2)
如果你传入一个'字符串,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));
答案 1 :(得分:1)
列只能有一种类型。因此,将列定义为varchar
并每次都使用引号。
更好的解决方法是使用准备好的陈述。