PHP中的SQL查询,类型未知

时间:2015-02-03 15:46:18

标签: php sql types

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

我怎样才能让这个工作一般?最好的一个查询。

2 个答案:

答案 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并每次都使用引号。

更好的解决方法是使用准备好的陈述。