mysql\u fetch\u array()/mysql\u fetch\u assoc()/mysql\u fetch\u row()/mysql\u num\u rows等等期望参数1是资源

dnph8jn4  于 2021-06-18  发布在  Mysql
关注(0)|答案(24)|浏览(482)

我试图从mysql表中选择数据,但收到以下错误消息之一:
mysql\u fetch\u array()期望参数1是资源,给定布尔值
这是我的密码:

$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'];
}
rsl1atfo

rsl1atfo16#

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

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

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

waxmsbnn17#

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

rxztt3cl

rxztt3cl18#

$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查询,您可以按查询顺序使用此查询。对于查询的使用,它比这个好得多。
我做了这个查询,没有得到像参数或布尔值这样的错误。

lf5gs5x2

lf5gs5x219#

正如scompt.com所解释的,查询可能会失败。使用以下代码可以获取查询错误或正确结果:

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

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

if($result)
{
    while($row = mysql_fetch_array($result))
    {
        echo $row['FirstName'];
    }
} else {
    echo 'Invalid query: ' . mysql_error() . "\n";
    echo 'Whole query: ' . $query; 
}

有关详细信息,请参阅文档 mysql_query() 更多信息。
实际的错误是单引号导致变量 $username 未分析。但你真的应该用 mysql_real_escape_string($username) 避免sql注入。

wqsoz72f

wqsoz72f20#

此查询应适用于:

$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '%$username%'");
while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

问题是单引号,因此查询失败并返回false,while循环无法执行。使用%可以匹配包含字符串的任何结果(例如sometext-$username sometext)。
这只是对你问题的回答,你应该实现其他帖子中提到的东西:错误处理,使用转义字符串(用户可以在字段中键入任何内容,你必须确保它不是任意代码),使用pdo代替mysql\u connect,它现在已经被去擦洗了。

z6psavjg

z6psavjg21#

任何时候你得到。。。
警告:mysqli\u fetch\u object()期望参数1是mysqli\u 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();

这个错误是一般性的,对你解决问题没有多大帮助。
再加上几行代码,您就可以获得非常详细的信息,您可以使用这些信息立即解决问题。检查 prepare() 声明的真实性,如果它是好的,你可以继续绑定和执行。

$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; // 1054 Unknown column 'foo' in 'field list'
    // handle error
}

如果出了问题,你可以吐出一条错误信息,直接把你带到问题上。在这种情况下,没有 foo 列中,解决问题是琐碎的。
如果您选择,您可以将此检查包含在函数或类中,并通过优雅地处理前面提到的错误来扩展它。

busg9geu

busg9geu22#

不要使用去擦洗mysql_ux*函数(PHP5.5中的去擦洗将在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();
?>
kkih6yb8

kkih6yb823#

试试这个,它必须是工作的,否则你需要打印错误来指定你的问题

$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'];
}
a11xaf1n

a11xaf1n24#

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

$results = mysql_query($connt, "SELECT * FROM users");

相关问题