Py学习  »  DATABASE

mysql error mysqli_num_rows()希望参数1在数据更新期间是mysqli_result[重复]

Syamsul • 4 年前 • 1271 次点击  

我试图从mysql表中选择数据,但收到以下错误消息之一:

mysql_fetch_array()期望参数1是资源,给定布尔值

mysqli_fetch_array()期望参数1是mysqli_result,给定布尔值

对布尔/非对象的成员函数fetch_array()的调用

这是我的代码:

$username = $_POST['username'];
$password = $_POST['password'];

$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

while($row = mysql_fetch_array($result)) {
    echo $row['FirstName'];
}

这同样适用于

$result = mysqli_query($mysqli, 'SELECT ...');
// mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given
while( $row=mysqli_fetch_array($result) ) {
    ...

$result = $mysqli->query($mysqli, 'SELECT ...');
// Call to a member function fetch_assoc() on a non-object
while( $row=$result->fetch_assoc($result) ) {
    ...

$result = $pdo->query('SELECT ...', PDO::FETCH_ASSOC);
// Invalid argument supplied for foreach()
foreach( $result as $row ) {
    ...

$stmt = $mysqli->prepare('SELECT ...');
// Call to a member function bind_param() on a non-object
$stmt->bind_param(...);

$stmt = $pdo->prepare('SELECT ...');
// Call to a member function bindParam() on a non-object
$stmt->bindParam(...);
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/44092
 
1271 次点击  
文章 [ 30 ]  |  最新文章 4 年前
Ritesh d joshi
Reply   •   1 楼
Ritesh d joshi    9 年前

试试这个代码,很好用

将post变量赋给变量

   $username = $_POST['uname'];

   $password = $_POST['pass'];

  $result = mysql_query('SELECT * FROM userData WHERE UserName LIKE $username');

if(!empty($result)){

    while($row = mysql_fetch_array($result)){
        echo $row['FirstName'];
     }
}
Funk Forty Niner Hamza Zafeer
Reply   •   2 楼
Funk Forty Niner Hamza Zafeer    5 年前

当数据库连接失败时,通常会发生错误,因此请确保连接数据库或包含数据库文件。

include_once(db_connetc.php');

// Create a connection
$connection = mysql_connect("localhost", "root", "") or die(mysql_error());

//Select database
mysql_select_db("db_name", $connection) or die(mysql_error());

$employee_query = "SELECT * FROM employee WHERE `id` ='".$_POST['id']."'";

$employee_data = mysql_query($employee_query);

if (mysql_num_rows($employee_data) > 0) {

    while ($row = mysql_fetch_array($employee_data)){
        echo $row['emp_name'];
    } // end of while loop
} // end of if
  • 最佳实践是在sqlyog中运行查询,然后将其复制到页面代码中。
  • 始终将查询存储在变量中,然后回显该变量。然后传到 mysql_query($query_variable); .
vaultah Mithun Debnath
Reply   •   3 楼
vaultah Mithun Debnath    9 年前

你可以试试这个代码。我是在早些时候遇到一个和你类似的问题时发现的。

if (isset($_GET['q1mrks']) && isset($_GET['marks']) && isset($_GET['qt1'])) {
$Q1mrks = $_GET['q1mrks'];
$marks = $_GET['marks'];
$qt1 = $_GET['qt1'];

$qtype_qry = mysql_query("
    SELECT *
    FROM s_questiontypes
    WHERE quetype_id = '$qt1'
");
$row = mysql_fetch_assoc($qtype_qry);
$qcode = $row['quetype_code'];

$sq_qry = "
    SELECT *
    FROM s_question
    WHERE quetype_code = '$qcode'
    ORDER BY RAND() LIMIT $Q1mrks
";
$sq_qry = mysql_query("
    SELECT *
    FROM s_question
    WHERE quetype_code = '$qcode'
    LIMIT $Q1mrks
");
while ($qrow = mysql_fetch_array($sq_qry)) {
    $qm = $qrow['marks'] . "<br />";
    $total += $qm . "<br />";
}
echo $total . "/" . $marks;
}
user28864
Reply   •   4 楼
user28864    10 年前

你也可以检查一下 $result 在执行fetch数组之前

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');
if(!$result)
{
     echo "error executing query: "+mysql_error(); 
}else{
       while($row = mysql_fetch_array($result))
       {
         echo $row['FirstName'];
       }
}
user1012181
Reply   •   5 楼
user1012181    9 年前

如果检查时没有出现任何mysql错误,请确保正确创建了数据库表。这件事发生在我身上。查找任何不需要的逗号或引号。

Peter Mortensen Leo
Reply   •   6 楼
Peter Mortensen Leo    10 年前

先检查你的连接。

如果要从数据库中获取确切的值,则应编写:

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName =`$usernam`");

或者你想把 LIKE 值的类型,然后您应该写:

$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '%$username%'");
A.Aleem11
Reply   •   7 楼
A.Aleem11    9 年前

在执行以下操作之前,请确保没有使用db_close()关闭数据库 运行查询:

如果在一个脚本中使用多个查询,甚至包括包含查询或数据库连接的其他页面,那么在任何地方都可能使用db_close()来关闭数据库连接,因此请确保在脚本中没有犯此错误。

Dennis Kiptugen
Reply   •   8 楼
Dennis Kiptugen    9 年前
<?php
      $username = $_POST['username'];
       $password = $_POST['password'];

     $result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '".mysql_real_escape_string($username)."'")or die(mysql_error());
while($row=mysql_fetch_array($result))
  {
 echo $row['FirstName'];
 }
 ?>
Peter Mortensen Leo
Reply   •   9 楼
Peter Mortensen Leo    10 年前

首先,检查与数据库的连接。连接是否成功?

如果完成了,那么在那之后我已经写了这段代码,并且它工作得很好:

if (isset($_GET['q1mrks']) && isset($_GET['marks']) && isset($_GET['qt1'])) {
    $Q1mrks = $_GET['q1mrks'];
    $marks = $_GET['marks'];
    $qt1 = $_GET['qt1'];

    $qtype_qry = mysql_query("
        SELECT *
        FROM s_questiontypes
        WHERE quetype_id = '$qt1'
    ");
    $row = mysql_fetch_assoc($qtype_qry);
    $qcode = $row['quetype_code'];

    $sq_qry = "
        SELECT *
        FROM s_question
        WHERE quetype_code = '$qcode'
        ORDER BY RAND() LIMIT $Q1mrks
    ";
    $sq_qry = mysql_query("
        SELECT *
        FROM s_question
        WHERE quetype_code = '$qcode'
        LIMIT $Q1mrks
    ");
    while ($qrow = mysql_fetch_array($sq_qry)) {
        $qm = $qrow['marks'] . "<br />";
        $total += $qm . "<br />";
    }
    echo $total . "/" . $marks;
}
Jay Blanchard
Reply   •   10 楼
Jay Blanchard    8 年前

任何时候你得到…

警告:mysqli_fetch_object()期望参数1是mysqli_result,给定布尔值

…很可能是因为您的查询有问题。这个 prepare() query() 可能返回 FALSE (一个布尔值),但是这个一般的失败消息不会给你留下太多线索。你如何发现你的查询有什么问题?你 !

首先,确保错误报告已打开且可见:在打开后立即将这两行添加到文件顶部 <?php 标签:

error_reporting(E_ALL);
ini_set('display_errors', 1);

如果在php.ini中设置了错误报告,您就不必担心这个问题。只需确保你能优雅地处理错误,永远不要向用户透露任何问题的真正原因。向公众揭示真正的原因可能是一个金字的邀请,为那些想伤害你的网站和服务器。如果不想将错误发送到浏览器,则可以始终监视Web服务器错误日志。日志位置因服务器而异,例如在ubuntu上,错误日志通常位于 /var/log/apache2/error.log . 如果在Linux环境中检查错误日志,可以使用 tail -f /path/to/log 在控制台窗口中查看实时发生的错误…或者在发生错误时。

一旦您对标准错误报告进行了权衡,在数据库连接和查询上添加错误检查将为您提供有关正在发生的问题的更多详细信息。看看这个列名不正确的例子。首先,返回一般致命错误消息的代码:

$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
$query = $mysqli->prepare($sql)); // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();

这个错误是一般性的,对你解决问题没有多大帮助。

通过多行代码,您可以获得非常详细的信息,可以用来解决问题 立即 . 检查 准备() 声明的真实性,如果它是好的,你可以继续绑定和执行。

$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
if($query = $mysqli->prepare($sql)) { // assuming $mysqli is the connection
    $query->bind_param('s', $definition);
    $query->execute();
    // any additional code you need would go here.
} else {
    $error = $mysqli->errno . ' ' . $mysqli->error;
    echo $error; // 1054 Unknown column 'foo' in 'field list'
}

如果出了什么问题,您可以弹出一条错误消息,将您直接带到问题。在这种情况下 foo 在表中的列中,解决问题很简单。

如果您选择,您可以将此签入包含在函数或类中,并通过优雅地处理前面提到的错误来扩展它。

Suresh Ratten
Reply   •   11 楼
Suresh Ratten    8 年前

试试这个

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysqli_query('SELECT * FROM Users WHERE UserName LIKE $username');

if($result){
while($row = mysqli_fetch_array($result))
{
    echo $row['FirstName'];
}
}
Manoj Kumar
Reply   •   12 楼
Manoj Kumar    9 年前

不要使用DEPLICATED mysql_ux函数(PHP5.5中的DEPLICATED将在PHP7中删除)。你可以做这个 mysqli pdo

下面是完整的select查询

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        // code here 
    }
} else {
    echo "0 results";
}
$conn->close();
?>
Brad
Reply   •   13 楼
Brad    9 年前

在mysql查询之前包含一个连接字符串变量。例如, $connt 在此代码中:

$results = mysql_query($connt, "SELECT * FROM users");
Peter Mortensen Leo
Reply   •   14 楼
Peter Mortensen Leo    10 年前
<?php
    $username = $_POST['username'];
    $password = $_POST['password'];
    $result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '".$username."'");

    while($row = mysql_fetch_array($result))
    {
        echo $row['FirstName'];
    }
?>

如果有一个用户有一个唯一的用户名,你可以用“=”来表示。没有必要喜欢。

您的问题是:

mysql_query("SELECT * FROM Users WHERE UserName ='".$username."'");
peterh
Reply   •   15 楼
peterh    10 年前

去你的 config.php . 我也有同样的问题。验证用户名和密码,并且sql select与配置的名称相同。

Peter Mortensen Leo
Reply   •   16 楼
Peter Mortensen Leo    10 年前

可能有两个原因:

  1. 在调用mysql_query函数之前,是否打开了与数据库的连接?我在你的代码里看不到。在进行查询之前使用mysql_connect。见 php.net/manual/en/function.mysql-connect.php

  2. 变量 用户名 在单引号字符串中使用,因此其值不会在查询中计算。查询肯定会失败。

第三,查询结构易于 SQL injection . 您可以使用准备好的声明来避免这种安全威胁。

Peter Mortensen Leo
Reply   •   17 楼
Peter Mortensen Leo    10 年前

请尝试以下代码。它可能工作得很好。

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName ='$username'");

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}
Amjad Omari
Reply   •   18 楼
Amjad Omari    8 年前

请尝试此操作,它必须正常工作,否则需要打印错误以指定问题

$username = $_POST['username'];
$password = $_POST['password'];

$sql = "SELECT * from Users WHERE UserName LIKE '$username'";
$result = mysql_query($sql,$con);

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}
John Conde
Reply   •   19 楼
John Conde    9 年前
$query = "SELECT Name,Mobile,Website,Rating FROM grand_table order by 4";

while( $data = mysql_fetch_array($query))
{
    echo("<tr><td>$data[0]</td><td>$data[1]</td><td>$data[2]</td><td>$data[3]</td></tr>");      
}

不使用where查询,可以按查询顺序使用此查询。使用查询要比这个好得多。

我已经完成了这个查询,没有得到像参数或布尔值这样的错误。

Peter Mortensen Leo
Reply   •   20 楼
Peter Mortensen Leo    10 年前

如果您在这里尝试了所有操作,但都不起作用,则可能需要检查mysql数据库排序规则。我的被设置为瑞典校勘。然后我把它改成 utf8_general_ci 一切都很顺利。

我希望这对某人有帮助。