form - php mysql table




mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows etc… espera que o parâmetro 1 seja um recurso (20)

Verifique se você não está fechando o banco de dados usando db_close () antes de executar sua consulta:

Se você estiver usando várias consultas em um script, mesmo que esteja incluindo outras páginas que contenham consultas ou conexão de banco de dados, talvez seja possível que em qualquer lugar que você use db_close () que feche sua conexão com o banco de dados, não fazendo esse erro em seus scripts.

Eu estou tentando selecionar dados de uma tabela MySQL, mas recebo uma das seguintes mensagens de erro:

mysql_fetch_array () espera que o parâmetro 1 seja um recurso, booleano dado

ou

mysqli_fetch_array () espera que o parâmetro 1 seja mysqli_result, booleano dado

ou

Chamar para uma função de membro fetch_array () em boolean / non-object

Este é o meu código:

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

O mesmo se aplica ao código como

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

e

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

e

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

e

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

e

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

Coloque aspas em torno de $username . Valores de sequência, em oposição a valores numéricos, devem ser colocados entre aspas.

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

Além disso, não faz sentido usar a condição LIKE se você não estiver usando caracteres curinga: se precisar de uma correspondência exata use = vez de LIKE .


Erro ocorrido aqui devido ao uso de aspas simples ( ' ). Você pode colocar sua consulta assim:

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

Está usando mysql_real_escape_string para prevenção de injeção de SQL. Embora devamos usar a extensão MySQLi ou PDO_MYSQL para a versão atualizada do PHP (PHP 5.5.0 e posterior), mas para versões mais antigas, mysql_real_escape_string fará o truque.


Essa mensagem de erro é exibida quando você tem um erro em sua consulta que causou a falha. Ele se manifestará ao usar:

  • mysql_fetch_array / mysqli_fetch_array()
  • mysql_fetch_assoc() / mysqli_fetch_assoc()
  • mysql_num_rows() / mysqli_num_rows()

Nota : Este erro não aparece se nenhuma linha for afetada pela sua consulta. Apenas uma consulta com uma sintaxe inválida gerará esse erro.

Etapas de solução de problemas

  • Certifique-se de ter seu servidor de desenvolvimento configurado para exibir todos os erros. Você pode fazer isso colocando isso no topo de seus arquivos ou no seu arquivo de configuração: error_reporting(-1); . Se você tiver algum erro de sintaxe, isso indicará a você.

  • Use mysql_error() . mysql_error() irá reportar qualquer erro que o MySQL encontrou ao executar sua consulta.

    Uso da amostra:

    mysql_connect($host, $username, $password) or die("cannot connect"); 
    mysql_select_db($db_name) or die("cannot select DB");
    
    $sql = "SELECT * FROM table_name";
    $result = mysql_query($sql);
    
    if (false === $result) {
        echo mysql_error();
    }
  • Execute sua consulta na linha de comando do MySQL ou em uma ferramenta como o phpMyAdmin . Se você tiver um erro de sintaxe em sua consulta, isso informará o que é.

  • Certifique-se de suas cotações estão corretas. Uma citação perdida em torno da consulta ou um valor pode causar falha na consulta.

  • Certifique-se de que você está escapando de seus valores. As cotações em sua consulta podem causar uma falha na consulta (e também deixá-lo aberto a injeções SQL). Use mysql_real_escape_string para escapar da sua entrada.

  • Certifique-se de não estar misturando as mysqli_* e mysql_* . Eles não são a mesma coisa e não podem ser usados ​​juntos. (Se você vai escolher um ou outro pau com mysqli_* . Veja abaixo o porquê).

Outras dicas

mysql_* funções não devem ser usadas para novos códigos. Eles não são mais mantidos e a comunidade iniciou o processo de descontinuidade . Em vez disso, você deve aprender sobre instruções preparadas e usar PDO ou MySQLi . Se você não puder decidir, este artigo ajudará a escolher. Se você gosta de aprender, aqui está um bom tutorial de PDO .


Experimente o seguinte código. Pode funcionar bem.

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

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

Geralmente, ocorre um erro quando a conectividade do banco de dados falha, portanto, certifique-se de conectar seu banco de dados ou de incluir o arquivo de banco de dados.

include_once(db_connetc.php');

OU

// 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
  • A melhor prática é executar a consulta no sqlyog e copiá-la no código da sua página.
  • Sempre armazene sua consulta em uma variável e, em seguida, repita essa variável. Em seguida, passe para mysql_query($query_variable); .

Não use a função mysql_ * desprezada (deprivada no php 5.5 será removida no php 7). e você pode fazer isso com mysqli ou pdo

aqui está a consulta de seleção completa

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

Pode haver dois motivos:

  1. Você abriu a conexão com o banco de dados antes de chamar a função mysql_query? Eu não vejo isso no seu código. Use mysql_connect antes de fazer a consulta. Veja php.net/manual/en/function.mysql-connect.php

  2. A variável $ username é usada dentro de uma string de aspas simples, portanto seu valor não será avaliado dentro da consulta. A consulta definitivamente falhará.

Em terceiro lugar, a estrutura da consulta é propensa a injeção de SQL . Você pode usar instruções preparadas para evitar essa ameaça à segurança.


Primeiro, verifique sua conexão com o banco de dados. Está conectado com sucesso ou não?

Se estiver pronto, depois disso eu escrevi este código e ele funciona bem:

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

Se você não tiver nenhum erro do MySQL aparecendo durante a verificação, certifique-se de ter criado corretamente a tabela do banco de dados. Isso aconteceu comigo. Procure por vírgulas ou citações indesejadas.


Seu código deve ser algo assim

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

if($result === FALSE) {
    die(mysql_error("error message for the user")); 
}

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

Uma vez feito isso, você teria a consulta impressa na tela. Tente esta consulta no seu servidor e veja se ela produz os resultados desejados. Na maioria das vezes, o erro está na consulta. Resto do código está correto.


Tente isso, deve ser o trabalho, caso contrário, você precisa imprimir o erro para especificar o seu problema

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

Toda vez que você pegar o ...

"Aviso: mysqli_fetch_object () espera que o parâmetro 1 seja mysqli_result, booleano dado"

... é provável, porque há um problema com sua consulta. O prepare() ou query() pode retornar FALSE (um booleano), mas essa mensagem de falha genérica não lhe deixa muitas pistas. Como você descobre o que há de errado com sua consulta? Você pergunta !

Antes de mais nada, certifique-se de que o relatório de erros esteja ativado e visível: adicione essas duas linhas à parte superior de seus arquivos logo após a abertura da tag <?php :

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

Se o seu relatório de erros foi definido no php.ini, você não terá que se preocupar com isso. Apenas certifique-se de lidar com os erros normalmente e nunca revelar a verdadeira causa dos problemas para os usuários. Revelar a verdadeira causa ao público pode ser um convite gravado em ouro para aqueles que querem prejudicar seus sites e servidores. Se você não quiser enviar erros ao navegador, sempre poderá monitorar os registros de erros do servidor da web. As localizações de log variam de servidor para servidor, por exemplo, no Ubuntu, o log de erros geralmente está localizado em /var/log/apache2/error.log . Se você estiver examinando logs de erros em um ambiente Linux, poderá usar tail -f /path/to/log em uma janela do console para ver os erros que ocorrem em tempo real ... ou como você os faz.

Uma vez que você é eliminado do relatório de erro padrão, adicionando a verificação de erros na sua conexão com o banco de dados, as consultas fornecerão muito mais detalhes sobre os problemas que estão ocorrendo. Dê uma olhada neste exemplo em que o nome da coluna está incorreto. Primeiro, o código que retorna a mensagem de erro fatal genérica:

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

O erro é genérico e não é muito útil para você resolver o que está acontecendo.

Com mais algumas linhas de código, você pode obter informações muito detalhadas que podem ser usadas para resolver o problema imediatamente . Verifique a declaração prepare() para a veracidade e, se for bom, você pode prosseguir para a vinculação e execução.

$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'
}

Se algo estiver errado, você pode cuspir uma mensagem de erro que leva você diretamente ao problema. Neste caso não há coluna foo na tabela, resolver o problema é trivial.

Se você escolher, você pode incluir essa verificação em uma função ou classe e estendê-la manipulando os erros normalmente, como mencionado anteriormente.


Uma consulta pode falhar por várias razões, caso em que ambas as extensões mysql_ * e mysqli retornarão false de suas respectivas funções / métodos de consulta. Você precisa testar essa condição de erro e lidar com ela de acordo.

extensão mysql_ * :

NOTA: As funções mysql_ estão obsoletas e foram removidas no php versão 7.

Verifique $result antes de passá-lo para mysql_fetch_array . Você verá que é false porque a consulta falhou. Veja a documentação do mysql_query para possíveis valores de retorno e sugestões de como lidar com eles.

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

if($result === FALSE) { 
    die(mysql_error()); // TODO: better error handling
}

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

extensão mysqli
estilo processual :

$username = mysqli_real_escape_string($mysqli, $_POST['username']);
$result = mysqli_query($mysqli, "SELECT * FROM Users WHERE UserName LIKE '$username'");

// mysqli_query returns false if something went wrong with the query
if($result === FALSE) { 
    yourErrorHandler(mysqli_error($mysqli));
}
else {
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
        ...

oo-style :

$username = $mysqli->escape_string($_POST['username']);
$result = $mysqli->query("SELECT * FROM Users WHERE UserName LIKE '$username'");

if($result === FALSE) { 
    yourErrorHandler($mysqli->error); // or $mysqli->error_list
}
else {
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
      ...

usando uma declaração preparada:

$stmt = $mysqli->prepare('SELECT * FROM Users WHERE UserName LIKE ?');
if ( !$stmt ) {
    yourErrorHandler($mysqli->error); // or $mysqli->error_list
}
else if ( !$stmt->bind_param('s', $_POST['username']) ) {
    yourErrorHandler($stmt->error); // or $stmt->error_list
}
else if ( !$stmt->execute() ) {
    yourErrorHandler($stmt->error); // or $stmt->error_list
}
else {
    $result = $stmt->get_result();
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
      ...

Esses exemplos ilustram apenas o que deve ser feito (tratamento de erros) e não como fazê-lo. Código de produção não deve usar or die quando a saída de HTML, senão vai (no mínimo) gerar HTML inválido. Além disso, as mensagens de erro do banco de dados não devem ser exibidas para usuários não administradores, pois divulgam informações em excesso .


Verifique sua conexão primeiro.

Então, se você quiser buscar o valor exato do banco de dados, escreva:

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

Ou você quer buscar o tipo LIKE de valor, então você deve escrever:

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

Você pode tentar este código. Eu encontrei mais cedo quando eu encontrei um problema semelhante ao seu.

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

Tente este código funciona bem

atribuir a variável post à variável

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

$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>");      
}

Em vez de usar uma consulta WHERE, você pode usar esta consulta ORDER BY. É muito melhor que isso para o uso de uma consulta.

Eu fiz essa consulta e não estou recebendo erros como parâmetro ou booleano.


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

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

Às vezes, suprimindo a consulta como @mysql_query(your query);


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




mysql