Php 是否将带有逗号的变量插入SQL数据库?
大约30分钟来,我一直在尝试将一个包含逗号的变量插入SQL数据库。我重复了变量,逗号在那里,但是当它插入时,没有逗号! 例如,一些类似于我的代码:Php 是否将带有逗号的变量插入SQL数据库?,php,sql,mysqli,Php,Sql,Mysqli,大约30分钟来,我一直在尝试将一个包含逗号的变量插入SQL数据库。我重复了变量,逗号在那里,但是当它插入时,没有逗号! 例如,一些类似于我的代码: $variable1 = "test"; $variable2 = "$variable1,"; $sql1 = "INSERT INTO table (`column`) VALUES ('$variable2')"; $query1 = mysqli_query($con,$sql1); //I dont think I need to put
$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;
结果是test,带有逗号,但列中的数据只是test,没有逗号。
请帮忙。
谢谢
编辑:
你的常识解决了这个问题,显然我需要在“$variable2”周围加上括号,所以它就像:
$sql1 = "INSERT INTO table (`column`) VALUES (('$variable2'))";
谢谢你的常识和所有其他尝试过的人 尝试插入到表“列”值中$可变2' 像这样试试:
$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时,填充孔,然后可以执行
这有两个优点:
它是安全的
你可以重复使用你的陈述
这比字符串插值更容易
答案很简单 您自己的代码会在插入之前或获取之后删除此逗号。 如果您想编写一个可复制的测试用例,您将看到没有人在使用逗号 测试用例指的是只涉及有问题的行为的代码。除了插入和提取之外,没有一行代码:
$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]);
运行它,用逗号查看所有内容,然后在您自己的代码中搜索逗号修剪代码
或者,可能您的表中没有逗号的测试,ans始终选择此测试,而不是使用逗号的测试
或者,mysql不会去掉逗号之类的愚蠢错误。您确定在您执行var_转储$sql1时它就在那里吗?当您在mysql监视器或其他db访问工具中执行select*from表时,它是否会显示在数据库中?您是否尝试过转义逗号?它似乎可以按原样工作,所以这是一个长期的问题,但可能会弄乱您的语法。可能只是因为它被截断了吗?如果您绑定参数而不是注入参数,您就不会面临这个问题,也不会容易受到sql注入的攻击。您应该真正研究准备好的语句或PDO。这可能有潜在的危险。使用它们并不困难,它使您的应用程序更安全。虽然它确实更安全,但安全在这里不是问题。虽然OP使用的常规方法也不会触发这种奇怪的情况。这是真的,但有趣的是,他有一些奇怪的失败,我们需要整个PHP配置和版本来找出它发生的原因。这是正确的方法,它只会解决整个问题。虽然如果您可以尝试这种方法,但它仍然会发生,那么我们可以得出结论,这是数据库级别的问题。不,但这仍然是mysqli。不需要PDO。我要把它绑起来,给我一点时间。它是用OP的代码插入的。你的代码也一样。它是插入的,没有逗号。哦,天哪!显然是支架把它修好了!我很惊讶我以前没有试过,或者没有人提到它们。非常感谢!多么愚蠢的错误@user2917204你在说什么括号?@EdgarKlerks看到了-现在更奇怪了。人为错误。此网站的非主题。@YourCommonSense查询中“$variable2”周围的内容。@user2917204您只需要一对括号。您的查询中已经有一个了。如果没有一对括号,您将无法插入。你真正需要的是充足的睡眠。