所以我有这个用于验证将要提交的表单的php。它需要用户生成的名称和ID,并根据数据库进行检查。
error_reporting(E_ALL);
require 'connection.php';
$conn = mysqli_connect($servername, $username, $password) or die("Error connecting to database: ".mysqli_error());
mysqli_select_db($conn,$database) or die(mysqli_error($conn));
$PName=$_POST['Name'];
$PID=$_POST['ID'];
$query = $PID;
$min_length = 0;
if(strlen($query) >= $min_length){
$query = htmlspecialchars($query);
$query = mysqli_real_escape_string($conn,$query);
$raw_results = mysqli_query($conn,"SELECT DISTINCT `Person_ID` FROM `Person_DT` WHERE `Person_ID` LIKE '%".$query."%'")" or die(mysqli_error($conn));
if(mysqli_num_rows($raw_results) > 0){
// this section was omitted to make the post shorter
// i.e. this reissues the previous form, but has all the previous information the user submitted
}
else{// this is the bit where I am having trouble
$addstmt=mysqli_stmt_prepare("INSERT INTO Person_dt (PName,PID) VALUES (?,?");
mysqli_stmt_bind_param('ss',$PName,$PID);
mysqli_stmt_execute($addstmt);
printf("%d Row Inserted.\n",$addstmt->affected_rows);
}
}
else{ // if query length is less than minimum
echo "Minimum length is ".$min_length;
}
所以在运行此代码时,我返回0行插入。我也没有回复错误;我的语法有问题吗?我应该换另一种方法吗?
答案 0 :(得分:2)
我没有演示代码,但看看你的例子,我看到一些错字级问题可能会影响你的输出。我注意到,至少在你发布的代码中,你的mysqli_query右括号后面的第14行有一个额外的引号。同样,您也不要在第21行的准备语句中关闭括号。
所以,请在第21行再次使用$addstmt=mysqli_stmt_prepare("INSERT INTO Person_dt (PName,PID) VALUES (?,?)");
- 因为这里的右括号是声明的一部分。
如果您正在寻找替代方法,mysqli()的面向对象接口看起来更清晰(参见The PHP mysqli docs)。就个人而言,我更喜欢使用PDO(docs here)。
祝你好运!我希望解决方案就像报价控制一样简单。