从mysql get文件链接的变量不起作用?

y0u0uwnf  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(396)

这个问题在这里已经有了答案

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);

?>
qgelzfjb

qgelzfjb1#

使用mysqli_stmt::bind_param时,第一个参数是数据类型 bind_param('s', $variable) https://php.net/manual/en/mysqli-stmt.bind-param.php
此外,mysqli不支持与pdo不同的命名参数
您需要更改代码以使用mysqli,并根据需要调整数据类型。

//...

$insert = "INSERT INTO `".$steamid."` (steamid, freeze, access, tos, balance, age, email, tradeurl, fullname) 
           VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
$stmt = $dbc->prepare($insert);
$stmt->bind_param('sssssssss', 
    $steam64, 
    $freeze, 
    $access, 
    $tos, 
    $balance, 
    $age, 
    $email, 
    $tradeurl, 
    $fullname
);

//...

提示/建议:

我推荐你使用严格比较运算符 === TRUE ,这是一个很好的做法。
关闭数据库连接
你只需要打一种电话 mysqli::close 因为它们执行相同的功能, mysqli_close($dbc); 是不需要的。

$dbc->close();
///mysqli_close($dbc);

包含语句
你不需要 Package include 括号中的路径。这只是lexer不需要处理的额外开销。
include require 以及他们的 _once 变体是php语言控制结构,而不是函数调用。
此外,您应该始终指定完整路径以避免歧义,避免 include_path 未找到文件时的查找,以及路径中的潜在漏洞。
另外,为了避免多次不必要地加载配置脚本,例如其他脚本所依赖的数据库连接,可以使用 require_once .
例子:

require_once __DIR__ . '/../../../mysql_connect/mysqli_connect_accounts.php';

会议
在使用之前,您应该始终检查会话是否已经存在 session_start .

if (!session_id()) {
    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。
例如:

echo 'Hello you owe $money';
//vs
echo 'Hello you owe ' . $money;
//vs
echo "Hello you owe $money";
//vs
echo "Hello you owe \$money";

相关问题