Php errno 1048和#x27;列';用户名';不能为空';
你能告诉我为什么我的代码不起作用吗?在我的用户名表中有两列,Php errno 1048和#x27;列';用户名';不能为空';,php,prepared-statement,Php,Prepared Statement,你能告诉我为什么我的代码不起作用吗?在我的用户名表中有两列,user\u id和username。user_id是自动递增的,所以我的Sql语句中没有这个,我认为这样做是正确的 <?php require('dbConnect.php'); $Number = $_POST['phonenumber']; // The ? below are parameter markers used for variable binding // auto increment does not ne
user\u id
和username
。user_id是自动递增的,所以我的Sql语句中没有这个,我认为这样做是正确的
<?php
require('dbConnect.php');
$Number = $_POST['phonenumber'];
// The ? below are parameter markers used for variable binding
// auto increment does not need prepared statements
$query = "INSERT INTO user (username) VALUES (?)";
$stmt = mysqli_prepare($con,$query) or die(mysqli_error($con));
//bind variables
mysqli_stmt_bind_param($stmt,"s",$u);
//$stmt->bind_param("s",$u);
mysqli_stmt_execute($stmt);
if(mysqli_query($con,$query))
{
echo 'Inserted correctly';
}
else
{
echo 'Error';
echo var_dump($stmt);
}
mysqli_stmt_close($stmt);
mysqli_close($con);
?>
像这样对自动增量使用null
$query = "INSERT INTO user (user_id,username) VALUES (null,$username)";
$u未设置,为空,您尝试执行它两次,一次使用prepare(好!),一次使用query(坏!)。而不是
echo'Error'代码>执行<代码>回显“错误”。mysqli_错误($con)代码>然后告诉我们错误是什么。然后运行var\u dump($\u POST)代码>也;出现了什么?顺便说一句;您的问题在这里$u
,您应该在这里使用$Number
,错误报告显然会向您抛出一个未定义的变量通知。假设POST数组不是空的。它的起源不得而知。这没有什么区别。事实上,它确实有区别,它让事情变得更糟@Qirel,还有一些原因。你说得对,弗雷德!我直接忽略了查询中的变量,也没有引号!是的,同意,这个问题也太普遍了。虽然我没有麻烦标记,而且我在手机上(甚至不是应用程序,使用浏览器),@fred如果ID是自动递增的,你可以不使用它,就像OP所做的那样,你不必将null作为一个值传递。然后直接在查询中引入变量(open for SQL injection),并通过在字符串周围没有引号引入语法错误。
$query = "INSERT INTO user (user_id,username) VALUES (null,$username)";