这个问题在这里已经有了答案:
mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows etc... expects parameter 1 to be resource
(31 个回答)
6年前关闭。
我的 PHP 脚本有问题。当我尝试保存数据时,它显示了一个错误。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<?php
require_once 'user.php';
if ( (isset($_POST["send"])) && ($_POST["send"] == 1)) {
if ( isset($_Post["login"]) ){
$login = mysql_real_escape_string(htmlspecialchars($_POST["login"]));
} else {
$login='';
}
if ( isset($_Post["pass"]) ){
$login = mysql_real_escape_string(htmlspecialchars($_POST["pass"]));
} else {
$pass='';
}
if ( isset($_Post["pass_v"]) ){
$login = mysql_real_escape_string(htmlspecialchars($_POST["pass_v"]));
} else {
$pass_v='';
}
if ( isset($_Post["email"]) ){
$login = mysql_real_escape_string(htmlspecialchars($_POST["email"]));
} else {
$email='';
}
if ( isset($_Post["emai_v"]) ){
$login = mysql_real_escape_string(htmlspecialchars($_POST["email_v"]));
} else {
$email_v='';
}
$existsLogin = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM login WHERE login='$login' LIMIT 1"));
$existsEmail = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM Email WHERE email='$email' LIMIT 1"));
$errors = '';
if (!$login || !$email || !$pass || !$pass_v || !$email_v ) $errors .= '- Musisz wypełnić wszystkie pola<br />';
if ($existsLogin[0] >= 1) $errors .= '- Ten login jest zajęty<br />';
if ($existsEmail[0] >= 1) $errors .= '- Ten e-mail jest już używany<br />';
if ($email != $email_v) $errors .= '- E-maile się nie zgadzają<br />';
if ($pass != $pass_v) $errors .= '- Hasła się nie zgadzają<br />';
if ($errors != '') {
echo '<p class="error">Rejestracja nie powiodła się, popraw następujące błędy:<br />'.$errors.'</p>';
} else {
$pass = user::passSalter($pass);
try {
$pdow = new PDO('mysql:host=localhost;dbname=log_cdr', 'root', 'slawek132');
$pdow->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sqlw = "INSERT INTO login (login, pass, pass_v, email, email_v) VALUES ('['login']','['pass']','['pass_v']','['email']','['email_v']')";
if ($pdow->query($sqlw)) {
echo "<script type= 'text/javascript'>alert('Dane użytkownika zapisane poprawnie.');</script>";
} else{
echo "<script type= 'text/javascript'>alert('Niepoprawne zapisanie danych użytkownika!');</script>";
}
$pdow = null;
} catch(PDOException $w) {
echo $w->getMessage();
}
//mysql_query("INSERT INTO log_cdr (login, email, email_v, pass, pass_v) VALUES('$login','$email','$pass');") or die ('<p class="error">Wystąpił błąd w zapytaniu i nie udało się zarejestrować użytkownika.</p>');
echo '<p class="success">'.$login.', zostałeś zarejestrowany.<br /><a href="login.php">Logowanie</a></p>';
}
}
?>
<form method="post" action="">
<label for="login">Wprowadź nazwę użytkownika</label>
<input maxlength="32" type="text" name="pass_v" placeholder="Wprowadź nazwę użytkownika"/>
<label for="pass">Wprowadź hasło</label>
<input maxlength="32" type="password" name="pass_v" placeholder="Wprowadź hasło"/>
<label for="pass_again">Wprowadź ponownie hasło</label>
<input maxlength="32" type="password" name="pass_v" placeholder="Wprowadź ponownie hasło"/>
<label for="email">Wprowadź E-mail</label>
<input type="text" name="email" maxlength="50" id="email" placeholder="Wprowadź Email"/>
<label for="email_again">Potwierdź Email</label>
<input type="text" maxlength="255" name="email_v" id="email_again" placeholder="Wprowadź ponownie Email"/><br />
<input type="hidden" name="send" value="1" />
<input type="submit" value="Zarejestruj" />
<input type="submit" value="Zmień hasło" />
<a href="logout.php"><input type="button" value="Wyloguj" name="Wyloguj"/ ></a>
</form>
<?php
require 'footer.php';
?>
</body>
</head>
错误消息:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\CDR\register.php on line 45
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\CDR\register.php on line 46
我更正为:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<?php
require_once 'user.php';
try {
$pdow = new PDO('mysql:host=localhost;dbname=log_cdr', 'root', 'slawek132');
$pdow->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sqlw = "INSERT INTO login (login, pass, pass_v, email, email_v)
VALUES ('['login']','['pass']','['pass_v']','['email']','['email_v']')";
if ($pdow->query($sqlw)) {
echo "<script type= 'text/javascript'>alert('Dane użytkownika zapisane poprawnie.');</script>";
}
else{
echo "<script type= 'text/javascript'>alert('Niepoprawne zapisanie danych użytkownika!');</script>";
}
$pdow = null;
}
catch(PDOException $w)
{
echo $w->getMessage();
}
$result = $mysqeli->query("SELECT COUNT(*) FROM log_cdr WHERE login='$login' LIMIT 1"); // btw, this query is vulnerable to SQL injection
$existsLogin = $result->fetch_array();
if ( (isset($_POST["send"])) && ($_POST["send"] == 1)) {
if ( isset($_POST["login"]) ){
$login = mysql_real_escape_string(htmlspecialchars($_POST["login"]));
} else {
$login='';
}
if ( isset($_POST["pass"]) ){
$login = mysql_real_escape_string(htmlspecialchars($_POST["pass"]));
} else {
$pass='';
}
if ( isset($_POST["pass_v"]) ){
$login = mysql_real_escape_string(htmlspecialchars($_POST["pass_v"]));
} else {
$pass_v='';
}
if ( isset($_POST["email"]) ){
$login = mysql_real_escape_string(htmlspecialchars($_POST["email"]));
} else {
$email='';
}
if ( isset($_POST["emai_v"]) ){
$login = mysql_real_escape_string(htmlspecialchars($_POST["email_v"]));
} else {
$email_v='';
}
$existsLogin = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM log_cdr WHERE login='$login' LIMIT 1"));
$existsEmail = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM log_cdr WHERE email='$email' LIMIT 1"));
$errors = '';
if (!$login || !$email || !$pass || !$pass_v || !$email_v ) $errors .= '- Musisz wypełnić wszystkie pola<br />';
if ($existsLogin[0] >= 1) $errors .= '- Ten login jest zajęty<br />';
if ($existsEmail[0] >= 1) $errors .= '- Ten e-mail jest już używany<br />';
if ($email != $email_v) $errors .= '- E-maile się nie zgadzają<br />';
if ($pass != $pass_v) $errors .= '- Hasła się nie zgadzają<br />';
if ($errors != '') {
echo '<p class="error">Rejestracja nie powiodła się, popraw następujące błędy:<br />'.$errors.'</p>';
}
else {
$pass = user::passSalter($pass);
//mysql_query("INSERT INTO log_cdr (login, email, email_v, pass, pass_v) VALUES('$login','$email','$pass');") or die ('<p class="error">Wystąpił błąd w zapytaniu i nie udało się zarejestrować użytkownika.</p>');
echo '<p class="success">'.$login.', zostałeś zarejestrowany.
<br /><a href="login.php">Logowanie</a></p>';
}
}
?>
<form method="post" action="">
<label for="login">Wprowadź nazwę użytkownika</label>
<input maxlength="32" type="text" name="pass_v" placeholder="Wprowadź nazwę użytkownika"/>
<label for="pass">Wprowadź hasło</label>
<input maxlength="32" type="password" name="pass_v" placeholder="Wprowadź hasło"/>
<label for="pass_again">Wprowadź ponownie hasło</label>
<input maxlength="32" type="password" name="pass_v" placeholder="Wprowadź ponownie hasło"/>
<label for="email">Wprowadź E-mail</label>
<input type="text" name="email" maxlength="50" id="email" placeholder="Wprowadź Email"/>
<label for="email_again">Potwierdź Email</label>
<input type="text" maxlength="255" name="email_v" id="email_again" placeholder="Wprowadź ponownie Email"/><br />
<input type="hidden" name="send" value="1" />
<input type="submit" value="Zarejestruj" />
<input type="submit" value="Zmień hasło" />
<a href="logout.php"><input type="button" value="Wyloguj" name="Wyloguj"/ ></a>
</form>
<?php
require 'footer.php';
?>
</body>
</html>
并有错误:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'login']','['pass']','['pass_v']','['email']','['email_v']')' at line 2
Notice: Undefined variable: mysqeli in C:\xampp\htdocs\CDR\register.php on line 38
Fatal error: Call to a member function query() on null in C:\xampp\htdocs\CDR\register.php on line 38
最佳答案
您正在混合 deprecated mysql_*
具有更现代的界面 PDO 的功能。
只要你没有 mysql_connect()
在开始时调用mysql_*
功能将不起作用。mysql_query()
返回 false
当它无法连接到数据库时,导致您的错误消息。
更改您的代码以仅使用 PDO。
另一件事,$_Post
不管用。 PHP 区分大小写,正确的变量名是 $_POST
.
关于PHP没有将数据保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35838704/