函数php中的if/else语句未插入

函数php中的if/else语句未插入,php,mysql,Php,Mysql,我想做的是检查输入字段,然后插入下面的查询,或者给出错误消息。我的问题是我的查询无法插入 我的PHP函数不起作用(其他文件,然后是html文件): 我的html文件: function Code($userID) { require '../conn.php'; $sql = "SELECT `current_uses` FROM `sub_codes` WHERE `content` = '".$_POST['Code']."'"; $result = mysqli_query

我想做的是检查输入字段,然后插入下面的查询,或者给出错误消息。我的问题是我的查询无法插入

我的PHP函数不起作用(其他文件,然后是html文件):

我的html文件:

function Code($userID) {
require '../conn.php';
    $sql = "SELECT `current_uses` FROM `sub_codes` WHERE `content` = '".$_POST['Code']."'";
    $result = mysqli_query($conn, $sql);
    $row = mysqli_fetch_array($result);
    if ($row['current_uses'] > 0){
        $query = "INSERT INTO `partner_subscriptions` (`id`, `user_id`, `sub_id`, `allowed_users`, `start_date`, `end_date`) VALUES (NULL, ?, ?, ?, ?, ?);";
        $stmt = $conn->prepare($query);
        $_userID = $userID;
        $_subID = '99'; 
        $_allowedUsers = '100';
        $_startDate = date('Y-m-d');
        $sql2 = "SELECT `end_date` FROM `sub_codes` WHERE `content` = '".$_POST['Code']."'";
        $result2 = mysqli_query($conn, $sql2);
        $row2 = mysqli_fetch_array($result2);
        $_endDate = $row2['end_date'];
        $stmt->bind_param("sssiiii", $_userID, $_subID, $_allowedUsers, $_startDate, $_endDate);
        $stmt->execute();
        $lastID = $conn->insert_id;
        $stmt->close();
        return $lastID;
    }else {
        echo "Wrong code";
    }
}
<br/><div class="form-group">
  <label title="Required">Free description code:</label>
   <input type="text" name="Code" class="form-control" id="Code"/>
</div><br/>

除了代码函数,其他所有函数都正常工作,我真的不知道为什么。我感谢你的帮助

我不得不将
“sssiiii”
改为
“iiiss”
,因为
“sssiiii”
中的每个字符都代表绑定到语句的单个值。

好吧,为了说明如何正确使用mysqli。首先,你必须控制你的代码。总是检查发生了什么,发现任何错误。您没有这样做,这就是您不知道为什么insert语句没有执行的原因

成功的错误处理

使用手册中详细说明的结果。当出现问题时,几乎每个mysqli方法都返回一个假值。用它

$sql = "SELECT current_uses FROM sub_codes WHERE content = ?";
$stmt = mysqli_prepare($connection, $sql);

// Is there a prepared statement?
if (!$stmt) {
    die(printf('Something went wrong: %s.', mysqli_error($connection)));
}

// use the mysqli statement (one type definition per used variable)
$result = mysqli_stmt_bind_param($stmt, "s", $_POST['code']);
if (!$result) {
    die(printf('Something went wrong: %s.', mysqli_stmt_error($stmt)));
} 

// execute the statement
$result = mysqli_stmt_execute($stmt);
if (!$result) {
    die(printf('Something went wrong: %s.', mysqli_stmt_error($stmt)));
}
如您所见,有必要检查每个mysqli函数调用的结果,以避免脚本出现不可预知的行为。始终记住不要在sql语句中直接使用post变量。这是一个巨大的错误,并通过sql注入打开脚本以发现多个漏洞


请阅读此处关于堆栈溢出的SQL注入主题中的一个,了解SQL注入是什么以及如何阻止它:

您有<代码> $STMT > bdIdPARAM(“SSsiIII”< /COD>)和只有5个参数。作为优化,考虑将<代码> EndoDeX</代码>添加到您的第一个查询(<代码> $SQL< /COD>),即使不使用该值,也不会对获取该值造成真正的惩罚。这样,您就不需要
$sql2
@NigelRen,因为
$id
为空,并且自动递增
绑定参数()
是指将SQL中的
值与PHP代码中的变量相链接。由于只有5个
和5个参数,
“sssiiii”
应该只与要绑定的字段相关。您已经被告知有什么问题。请查看
mysqli_stmt::bind_param()的
$type
参数的正确用法
方法。您的
'sssiiii'
中的每个字符都代表绑定到语句的单个值。您有七个单个字符,但只有五个值。除此之外,每个字符都定义绑定变量的类型。a's'代表字符串,i'代表整数等等。谢谢!正在阅读but我现在得到这个错误
致命错误:未捕获错误:调用C:\xampp\htdocs\new sc\functions\save\savePartner.php中布尔值上的成员函数bind_param()。php:60堆栈跟踪:#0 C:\xampp\htdocs\new sc\functions\save\savePartner.php(11):代码(385,'ZazC5cKDW1S3eQA…)#1{main}在第60行的C:\xampp\htdocs\new sc\functions\save\savePartner.php中抛出,因此我修复了该错误,但现在它不再插入数据。我不知道您所做的更改。调试您的代码并计算mysqli_*函数的每个返回值,正如我在上面的示例中所示。是的,这是一项大量工作,因为您的代码不是很好。不管怎样…调试你的代码并计算每个返回值!我修复了它。谢谢你的帮助
$sql = "SELECT current_uses FROM sub_codes WHERE content = ?";
$stmt = mysqli_prepare($connection, $sql);

// Is there a prepared statement?
if (!$stmt) {
    die(printf('Something went wrong: %s.', mysqli_error($connection)));
}

// use the mysqli statement (one type definition per used variable)
$result = mysqli_stmt_bind_param($stmt, "s", $_POST['code']);
if (!$result) {
    die(printf('Something went wrong: %s.', mysqli_stmt_error($stmt)));
} 

// execute the statement
$result = mysqli_stmt_execute($stmt);
if (!$result) {
    die(printf('Something went wrong: %s.', mysqli_stmt_error($stmt)));
}