将带有逗号的变量插入 SQL 数据库


Inserting a variable with a comma in it to SQL database?

我一直在尝试将一个包含逗号的变量插入 SQL 数据库 30 分钟左右。我已经回显了变量,逗号在那里,但是当它插入时,没有逗号!示例(一些像我的代码):

$variable1 = "test";
$variable2 = "$variable1,";
$sql1 = "INSERT INTO table (`column`) VALUES ('$variable2')";
$query1 = mysqli_query($con,$sql1); //I dont think I need to put a con variable up there for an example code

当我这样做时:

echo $variable2;

结果是测试,带有逗号,但列中的数据只是测试,没有逗号。请帮忙。谢谢。

编辑:你的常识修复了它,显然我需要在"$variable 2"周围加上括号,所以它就像:

    $sql1 = "INSERT INTO table (`column`) VALUES (('$variable2'))";

感谢您的常识和其他所有尝试过的人!

嗯,答案很简单。

这是您自己的代码确实在插入之前或获取后删除了此逗号。
如果你愿意写一个可重现的测试用例,你会发现没有人使用你的逗号。

测试用例是指涉及相关行为的代码,而不是其他任何内容。插入和获取旁边没有一行代码:

$variable1 = "test";
$variable2 = "$variable1,";
$sql1 = "INSERT INTO users (username) VALUES ('$variable2')";
mysqli_query($db,$sql1);
$sql2 = "SELECT username FROM users WHERE username ='$variable2'";
$res  = mysqli_query($db,$sql2);
$row  = mysqli_fetch_row($res); 
var_dump($variable1, $variable2, $sql1, $sql2, $row[0]);

运行它,使用逗号查看所有内容,然后在您自己的代码中搜索逗号修剪代码

或者您可能只是在表中没有逗号的情况下进行测试,并且一直选择这个,而不是带逗号的。

或任何愚蠢的错误之类的

像这样尝试:

$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');
$stmt = $mysqli->prepare("INSERT INTO table ('column') VALUES (?)");
$stmt->bind_param($variable2);
/* execute prepared statement */
$stmt->execute();

这更安全,不会引发这种奇怪现象。(这是一个词吗?

这里发生的情况是,查询被发送到 sql 数据库,这将返回一个语句。该语句有一些漏洞,这些是 ?,其中。使用bind_param时,您可以填充漏洞,然后可以执行。

这有几个优点:

  • 它是安全的
  • 您可以重复使用您的对帐单
  • 它比字符串插值的东西更容易

尝试"INSERT INTO table ('column') VALUES ('" . $variable2 . "');"