这个问题在这里已经有了答案:
mysqli_fetch_assoc()需要参数/调用成员函数bind_param()时出错。如何获得实际的mysql错误并修复它(1个答案)
三个月前关门了。
这是一个脚本,我正在做,检查是否登录,如果是重定向,如果没有创建一个配置文件页和重定向到tos。我有一个工作代码使用一个基本的插入工作(在顶部)。然后是一个我无法使用下面准备好的语句来工作的问题。
<?php
session_start();
require ('../../../mysql_connect/mysqli_connect_accounts.php');
require ('../steamauth/steamauth.php');
require ('../steamauth/userInfo.php');
$steamid=$_SESSION['steamid'];
$query = "SELECT * FROM `".$steamid."`";
$response = @mysqli_query($dbc, $query);
if($response){
header("Location: http://theskindealer.com/index.php");
} else {
$create = "CREATE TABLE `".$steamid."` (
steamid VARCHAR(30),
fullname VARCHAR(30),
tradeurl VARCHAR(30),
email VARCHAR(50),
age INT(3),
tos INT(1),
access INT(1),
first INT(1),
balance DECIMAL(9,2)
)";
if ($dbc->query($create) === TRUE) {
$insert = "INSERT INTO `".$steamid."` (steamid, first, access, tos, balance, age, email, tradeurl, fullname) VALUES ($steamid, 1, 0, 0, 0.00, 0, 0, 0, 0)";
if ($dbc->query($insert) === TRUE) {
header("Location: http://theskindealer.com/tos/accept.php");
} else {
header("Location: http://theskindealer.com/pages/errorlogin.php");
}
} else {
header("Location: http://theskindealer.com/pages/errorlogin.php");
}
}
$dbc->close();
mysqli_close($dbc);
?>
然后。。。这段代码要么一直重定向到索引,即使在删除数据库之后,也不会保存数据。或白色屏幕,不保存数据。
<?php
session_start();
require ('../../../mysql_connect/mysqli_connect_accounts.php');
require ('../steamauth/steamauth.php');
require ('../steamauth/userInfo.php');
$steamid=$_SESSION['steamid'];
$query = "SELECT * FROM `".$steamid."`";
$response = @mysqli_query($dbc, $query);
if($response){
header("Location: http://theskindealer.com/index.php");
} else {
$create = "CREATE TABLE `".$steamid."` (
steamid VARCHAR(30),
fullname VARCHAR(30),
tradeurl VARCHAR(30),
email VARCHAR(50),
age INT(3),
tos INT(1),
access INT(1),
freeze INT(1),
balance DECIMAL(9,2)
)";
if ($dbc->query($create) === TRUE) {
$insert = "INSERT INTO `".$steamid."` (steamid, freeze, access, tos, balance, age, email, tradeurl, fullname) VALUES (:steamid, :freeze, :access, :tos, :balance, :age, :email, :tradeurl, :fullname)";
$stmt = $dbc->prepare($insert);
$stmt->bind_param(':steamid', $steam64);
$stmt->bind_param(':freeze', $freeze);
$stmt->bind_param(':access', $access);
$stmt->bind_param(':tos', $tos);
$stmt->bind_param(':balance', $balance);
$stmt->bind_param(':age', $age);
$stmt->bind_param(':email', $email);
$stmt->bind_param(':tradeurl', $tradeurl);
$stmt->bind_param(':fullname', $fullname);
$steam64 = $steamid;
$freeze = 0;
$access = 0;
$tos = 0;
$balance = 0.00;
$age = 0;
$email = "null";
$tradeurl = "null";
$fullname = "null";
$stmt->execute();
header("Location: http://theskindealer.com/tos/accept.php");
} else {
header("Location: http://theskindealer.com/pages/errorlogin.php");
}
}
$stmt->close();
$dbc->close();
mysqli_close($dbc);
?>
1条答案
按热度按时间qgelzfjb1#
使用mysqli_stmt::bind_param时,第一个参数是数据类型
bind_param('s', $variable)
https://php.net/manual/en/mysqli-stmt.bind-param.php此外,mysqli不支持与pdo不同的命名参数
您需要更改代码以使用mysqli,并根据需要调整数据类型。
提示/建议:
我推荐你使用严格比较运算符
=== TRUE
,这是一个很好的做法。关闭数据库连接
你只需要打一种电话
mysqli::close
因为它们执行相同的功能,mysqli_close($dbc);
是不需要的。包含语句
你不需要 Package
include
括号中的路径。这只是lexer不需要处理的额外开销。include
require
以及他们的_once
变体是php语言控制结构,而不是函数调用。此外,您应该始终指定完整路径以避免歧义,避免
include_path
未找到文件时的查找,以及路径中的潜在漏洞。另外,为了避免多次不必要地加载配置脚本,例如其他脚本所依赖的数据库连接,可以使用
require_once
.例子:
会议
在使用之前,您应该始终检查会话是否已经存在
session_start
.还建议使用重新生成会话id
session_regenerate_id()
以避免会话劫持。资料来源:http://php.net/manual/en/features.session.security.management.php#features.session.security.management.session-id再生单引号/双引号使用
强烈建议只使用单引号。
除了在使用双引号时可以忽略的性能损失之外,在代码中混合使用单引号和双引号通常会导致混乱和难以发现的bug。单引号的值被视为文本字符串,并且总是产生您提供的值,不需要转义。当使用双引号时,lexer将解析字符串以确定是否有需要解释的特殊字符,例如使用
$
或者\
.http://php.net/manual/en/language.types.string.php
例外情况是您确实需要使用特殊字符,例如
\r \n \t
,等等,需要双引号来处理lexer。例如: