php - 准备好的声明没有执行

时间:2018-05-05 01:12:21

标签: php

所以我有这个用于验证将要提交的表单的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行插入。我也没有回复错误;我的语法有问题吗?我应该换另一种方法吗?

1 个答案:

答案 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)。

祝你好运!我希望解决方案就像报价控制一样简单。