函数php中的if/else语句未插入
我想做的是检查输入字段,然后插入下面的查询,或者给出错误消息。我的问题是我的查询无法插入 我的PHP函数不起作用(其他文件,然后是html文件): 我的html文件:函数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
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)));
}