Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否将带有逗号的变量插入SQL数据库?_Php_Sql_Mysqli - Fatal编程技术网

Php 是否将带有逗号的变量插入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

大约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 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您只需要一对括号。您的查询中已经有一个了。如果没有一对括号,您将无法插入。你真正需要的是充足的睡眠。