我一直在尝试将一个包含逗号的变量插入 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 . "');"