警告:mysqli_query()期望参数1为mysqli,给定字符串

时间:2015-08-18 19:26:46

标签: php mysql mysqli

首先我要说的是,我已经在这里和其他网站上阅读了大约15个类似的帖子,试图在发布之前解决我的问题。

我用一些php和mysql测试网站。一些信息:

我构建了本地托管的网站,然后导出到000 webhost。为了测试php和mysql函数,这甚至是必要的吗?我在本地有一个mysql数据库。这会导致问题吗?

我有两个问题。

  1. 在运行任何php脚本的页面上,我收到以下警告:
  2.   

    警告:出于安全原因,在第2行的/home/a2575478/public_html/Login.php中已禁用virtual()

         

    警告:mysqli_query()要求参数1为mysqli,在第37行的/home/a2575478/public_html/Login.php中给出为null

         

    警告:mysqli_error()要求参数1为mysqli,在第37行的/home/a2575478/public_html/Login.php中给出为null

    我知道这些警告与不推荐使用的mysql_ *函数有关,但在修复已弃用的函数时遇到问题

    2

    现在,当我尝试在本地访问网页时,我得到的只是一个"网页不可用"错误。这是由于错误还是只是尝试在本地运行php?

    网站可以访问here

    如果您需要更多信息,请与我们联系。

    以下代码。

    的login.php

        <?php @session_start(); ?>
        <?php virtual('/Connections/logincon.php'); ?>
        <?php
        if (!function_exists("GetSQLValueString")) {
        function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
        {
          if (PHP_VERSION < 6) {
            $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
          }
    
          $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
    
          switch ($theType) {
            case "text":
              $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
              break;    
            case "long":
            case "int":
              $theValue = ($theValue != "") ? intval($theValue) : "NULL";
              break;
            case "double":
              $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
              break;
            case "date":
              $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
              break;
            case "defined":
              $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
              break;
          }
          return $theValue;
        }
        }
    
    
        $query_Login = "SELECT * FROM `user`";
        $Login = mysqli_query($logincon,$query_Login) or die(mysqli_error($logincon));
        $row_Login = mysql_fetch_assoc($Login);
        $totalRows_Login = mysql_num_rows($Login);
        mysqli_select_db($database_logincon, $logincon);
        ?>
        <?php
        // *** Validate request to login to this site.
        if (!isset($_SESSION)) {
          session_start();
        }
    
        $loginFormAction = $_SERVER['PHP_SELF'];
        if (isset($_GET['accesscheck'])) {
          $_SESSION['PrevUrl'] = $_GET['accesscheck'];
        }
    
        if (isset($_POST['Username'])) {
          $loginUsername=$_POST['Username'];
          $password=$_POST['Password'];
          $MM_fldUserAuthorization = "UserLevel";
          $MM_redirectLoginSuccess = "/Account.php";
          $MM_redirectLoginFailed = "/Login.php";
          $MM_redirecttoReferrer = true;
          mysql_select_db($database_logincon, $logincon);
    
          $LoginRS__query=sprintf("SELECT Username, Password, UserLevel FROM `user` WHERE Username=%s AND Password=%s",
          GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text")); 
    
          $LoginRS = mysql_query($LoginRS__query, $logincon) or die(mysql_error());
          $loginFoundUser = mysql_num_rows($LoginRS);
          if ($loginFoundUser) {
    
        $loginStrGroup  = mysql_result($LoginRS,0,'UserLevel');
    
        if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();}
        //declare two session variables and assign them
        $_SESSION['MM_Username'] = $loginUsername;
        $_SESSION['MM_UserGroup'] = $loginStrGroup;       
    
        if (isset($_SESSION['PrevUrl']) && true) {
          $MM_redirectLoginSuccess = $_SESSION['PrevUrl'];  
        }
        header("Location: " . $MM_redirectLoginSuccess );
      }
      else {
        header("Location: ". $MM_redirectLoginFailed );
      }
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <link href="CSS/Layout.css" rel="stylesheet" type="text/css"  />
    <link href="CSS/Menu.css" rel="stylesheet" type="text/css"  />
    <link href="CSS/Menu.css" rel="stylesheet" type="text/css" />
    <link href="/SpryAssets/SpryValidationTextField.css" rel="stylesheet" type="text/css" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Untitled Document</title>
    <script src="/SpryAssets/SpryValidationTextField.js" type="text/javascript"></script>
    </head>
    
    <body>
    <div id="Holder">
    <div id="Header"></div>
    <div id="NavBar">
        <nav>
            <ul>
                <li><a href="Login.php">Login</a></li>
                <li><a href="Register.php">Register</a></li>
                <li><a href="ForgotPassword.php">Forgot Password</a></li>
            </ul>
        </nav>
    </div>
    <div id="Content">
        <div id="PageHeading">
          <h1>Home Page </h1>
        </div>
        <div id="ContentLeft">
          <h2>This is a test page for a project in progress</h2>
          <p>&nbsp;</p>
          <h6>A work in progress.   </h6>
        </div>
        <div id="ContentRight">
          <form id="form1" name="form1" method="POST" action="<?php echo $loginFormAction; ?>">
            <span id="sprytextfield1">
            <label for="LoginForm"></label>
            <span class="textfieldRequiredMsg">A value is required.</span></span>
            <table width="400" border="0" align="center">
              <tr>
                <td><h6><span id="sprytextfield2">
                  <label for="Username"></label>
                  Username:<br />
                  <br />
                  <input name="Username" type="text" class="StyleTxtField" id="Username" />
                  </span></h6>
                <span><span class="textfieldRequiredMsg">A value is required.</span></span></td>
                </tr>
              <tr>
                <td>&nbsp;</td>
                </tr>
              <tr>
                <td><h6><span id="sprytextfield3">
                  <label for="Password"></label>
                  Password:<br />
                  <br />
                  <input name="Password" type="text" class="StyleTxtField" id="Password" />
                  </span></h6>
                <span><span class="textfieldRequiredMsg">A value is required.</span></span></td>
                </tr>
              <tr>
                <td>&nbsp;</td>
                </tr>
              <tr>
                <td><input type="submit" name="LoginButton" id="LoginButton" value="Login" /></td>
                </tr>
              <tr>
                <td>&nbsp;</td>
                </tr>
              </table>
          </form>
        </div>
     </div>
    <div id="Footer"> </div>
    
    </div>
    <script type="text/javascript">
    var sprytextfield1 = new Spry.Widget.ValidationTextField("sprytextfield1");
    var sprytextfield2 = new Spry.Widget.ValidationTextField("sprytextfield2");
    var sprytextfield3 = new Spry.Widget.ValidationTextField("sprytextfield3");
    </script>
    </body>
    </html>
    <?php
    mysql_free_result($Login);
    ?>
    

    Logincon.php,管理数据库连接

    <?php
    # FileName="Connection_php_mysql.htm"
    # Type="MYSQL"
    # HTTP="true"
    $hostname_logincon = "172.16.1.72:3306";
    $database_logincon = "logindb";
    $username_logincon = "root";
    $password_logincon = "boombox";
    $logincon = mysql_pconnect($hostname_logincon, $username_logincon, $password_logincon) or trigger_error(mysql_error(),E_USER_ERROR); 
    ?>
    

    提前感谢您的回复

2 个答案:

答案 0 :(得分:2)

您正在混合mysqlmysqli个功能。你不能这样做。 logincon.php需要使用mysqli_connect,而不是mysql_pconnect

$logincon = mysqli_connect($hostname_logincon, $username_logincon, $password_logincon, $database_logincon) or trigger_error(mysqli_connect_error(),E_USER_ERROR); 

在主脚本中,您应该使用mysqli_real_escape_string代替mysql_real_escape_string

$theValue = myqsli_real_escape_string($logincon, $theValue);

您必须使用mysqli_fetch_assocmysqli_num_rows

答案 1 :(得分:0)

最后,我只是将mysql_ *函数更改为mysqli_ *函数。我的问题现在在脚本和我的Mysql数据库之间。我会提出一个更具相关性的新问题。

再次感谢您的帮助。