source

mysql_module_array()/module_module_assoc()/module_module_num_rows 등...파라미터 1이 리소스가 될 것으로 예상합니다.

factcode 2022. 9. 12. 11:35
반응형

mysql_module_array()/module_module_assoc()/module_module_num_rows 등...파라미터 1이 리소스가 될 것으로 예상합니다.

MySQL 테이블에서 데이터를 선택하려고 하는데 다음 오류 메시지 중 하나가 나타납니다.

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

할 수 이 경우 ""를 합니다.mysql_*는 mysqli입니다.false각 쿼리 기능/기능에서 추출합니다.그 에러 상태를 테스트해, 적절히 대처할 필요가 있습니다.

mysql_ 확장자:

주의: mysql_ 함수는 폐지되어 php 버전7에서는 삭제되었습니다.

마크를 켜주세요.$result을 달달에 mysql_fetch_array . . . . . . . . . . . . . . ..false이치노 」를 .mysql_query][1] 가능한 반환값에 대한 문서와 그 처리 방법에 대한 제안.

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

if($result === FALSE) { 
    trigger_error(mysql_error(), E_USER_ERROR);
}

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

이 오류 메시지는 쿼리에 오류가 발생하여 실패한 경우 표시됩니다.다음 기능을 사용할 때 나타납니다.

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

주의: 이 오류는 쿼리의 영향을 받는 행이 없는 경우 나타나지 않습니다.잘못된 구문을 가진 쿼리만 이 오류를 생성합니다.

트러블 슈팅 순서

  • 모든 오류를 표시하도록 개발 서버가 구성되어 있는지 확인하십시오.이 작업을 수행하려면 파일 맨 위 또는 설정 파일에 이 항목을 배치합니다.구문 오류가 있는 경우 해당 오류가 표시됩니다.

  • 를 사용합니다.mysql_error()MySQL을 사용하다

    사용 예:

    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();
    }
    
  • MySQL 명령줄 또는 phpMyAdmin과 같은 도구에서 쿼리를 실행합니다.쿼리에 구문 오류가 있는 경우, 이것이 무엇인지 알려줍니다.

  • 당신의 견적이 정확한지 확인하세요.쿼리 주변에 따옴표가 없거나 값이 없으면 쿼리가 실패할 수 있습니다.

  • 가치관을 벗어나야 합니다.쿼리에 따옴표가 있으면 쿼리가 실패할 수 있습니다(또한 SQL 주입에 대해 열려 있습니다).입력을 회피하기 위해 사용합니다.

  • '혼합'이 되지 않도록 .mysqli_* ★★★★★★★★★★★★★★★★★」mysql_*같은 사용할 수 .mysqli_*그 이유에 대해서는, 이하를 참조해 주세요).

기타 힌트

mysql_*함수를 새 코드에 사용하지 마십시오.그들은 더 이상 유지되지 않고 지역사회는 폐지 과정을 시작했다.대신 준비된 문장에 대해 배우고 PDO 또는 MySQLi를 사용해야 합니다.결정을 못 하겠다면 이 기사가 선택에 도움이 될 것입니다.배우고 싶다면 여기 좋은 PDO 튜토리얼이 있습니다.

한 것은 따옴표(따옴표)를 사용했기 입니다.'할 수

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

mysql_real_escape_stringSQL 입 sql sql sql 。의 PHP5.5 PDO_MYSQL 해야 하지만 의 경우 PHP는 MySQLi(PHP 5.5.0 이후)입니다.mysql_real_escape_string효과가 있을 거야

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

상세한 것에 대하여는, 의 메뉴얼을 참조해 주세요.

때문에 「」는 「」로 되어 있습니다.$username해석되지 않았습니다. 진짜 '아까'를 써야 요.mysql_real_escape_string($username)SQL 입 sql sql sql 。

$username문자열 합니다. 숫자 값이 아닌 문자열 값은 따옴표로 묶어야 합니다.

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

,, 이, 이, 이, 이, 이, 이, also, also,LIKE하지 않는: " " 를 사용합니다.=LIKE.

데이터베이스가 선택되지 않은 경우가 있으므로 선택한 데이터베이스가 아닌지를 확인하십시오.

확인.

mysql_select_db('database name ')or DIE('Database name is not available!');

MySQL 쿼리 전에 다음 단계로 이동합니다.

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

f($result === FALSE) {
    die(mysql_error());

코드는 다음과 같아야 합니다.

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

이 작업을 완료하면 화면에 쿼리가 인쇄됩니다.서버에서 이 쿼리를 시도하여 원하는 결과를 얻을 수 있는지 확인하십시오.대부분의 경우 쿼리에 오류가 있습니다.나머지 코드는 정확합니다.

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

작은 따옴표를 사용하여 문자열을 정의하며 PHP는 작은따옴표로 구분된 문자열을 구문 분석하지 않습니다.변수 보간을 얻으려면 큰따옴표 또는 문자열 연결(또는 그 조합)을 사용해야 합니다.상세한 것에 대하여는, http://php.net/manual/en/language.types.string.php 를 참조해 주세요.

또한 mysql_query가 유효한 결과 리소스를 반환했는지 확인해야 합니다.그렇지 않으면 fetch_*, num_rows 등은 결과가 아니기 때문에 결과에서 작동하지 않습니다.IE:

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

if( $result === FALSE ) {
   trigger_error('Query failed returning error: '. mysql_error(),E_USER_ERROR);
} else {
   while( $row = mysql_fetch_array($result) ) {
      echo $row['username'];
   }
}

자세한 것은, http://us.php.net/manual/en/function.mysql-query.php 를 참조해 주세요.

이 쿼리는 동작합니다.

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

이 문제는 작은 따옴표로 인해 쿼리가 실패하고 FALSE가 반환되며 WHY 루프가 실행되지 않습니다.% 를 사용하면 문자열을 포함하는 모든 결과(SomeText-$username-SomeText 등)를 일치시킬 수 있습니다.

이것은 단순히 질문에 대한 대답입니다.다른 투고에 기재된 에러 처리, 이스케이프 스트링 사용(사용자는 필드에 무엇이든 입력할 수 있으며 임의 코드가 아님을 확인해야 함)을 구현해야 합니다.이제 디컴피컬레이션된 mysql_connect 대신 PDO를 사용합니다.

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

에 따라서는 쿼리를 할 수 있습니다.@mysql_query(your query);

여기서 모든 것을 시도했지만 작동하지 않는 경우 MySQL 데이터베이스 정렬을 확인하는 것이 좋습니다.내 것은 스웨덴에서 취합하기로 되어 있었다. 나서 ' 하다'로 요.utf8_general_ci모든 게 딱 맞아떨어졌어요

$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 쿼리를 사용하는 대신 이 ORDER BY 쿼리를 사용할 수 있습니다.쿼리 사용에는 이것보다 훨씬 좋습니다.

이 쿼리를 실행했지만 파라미터나 부울 등의 에러는 표시되지 않습니다.

작업을 시도합니다. 작업 중이어야 합니다. 그렇지 않으면 오류를 인쇄하여 문제를 지정해야 합니다.

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

두 가지 이유가 있을 수 있습니다.

  1. 를 호출하기 에 대한 적이 ?mysql_query " " " " " " " " " " " 。합니다.「mysql_connect」라고 합니다. 것은, 을 참조하십시오.php.net/manual/en/function.mysql-connect.php

  2. 변수 $username은 단일 따옴표 문자열 내에서 사용되므로 해당 값은 쿼리 내에서 평가되지 않습니다.쿼리는 반드시 실패합니다.

셋째, 쿼리 구조는 SQL 주입에 취약합니다.이 보안 위협을 피하기 위해 준비된 문을 사용할 수 있습니다.

다음 코드를 사용해 보십시오.잘 될 수도 있어요.

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

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

집으로 가세요.config.php★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★sql select 설정.

mysql_* 함수는 사용하지 마십시오(ph 5.5에서 제거된 기능은 php 7에서 제거됩니다). mysqli 또는 pdo를 사용하여 만들 수 있습니다.

다음은 완전한 선택 쿼리입니다.

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

MySQL の my my my my my my my my my 。를 들어, 「」라고 하는 것은,$connt음음음:

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

언제 어디서든...

"경고: mysqli_fetch_object()는 매개 변수 1이 mysqli_result이며 부울이 지정됩니다."

의 쿼리에 가 있기 일 수 .당신의 쿼리에 문제가 있기 때문일 수 있습니다.prepare() ★★★★★★★★★★★★★★★★★」query()도 모르다FALSE(Boolean) 단, 이 일반적인 실패 메시지는 많은 단서를 남기지 않습니다.질문의 문제점을 어떻게 발견합니까?당신이 물어봐요!

으로 되어.「 」 「 」 「 」 「 」 「 」를 연 이 2 합니다.아, 네, 네, 네, 네.<?php 삭제:

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

되어 있는 php.ini에 대해 걱정할 필요가 없습니다.사용자에게 문제의 진정한 원인을 밝히지 않고 오류를 적절하게 처리하도록 하십시오.당신의 사이트와 서버에 해를 끼치고 싶은 사람들에게 진정한 원인을 대중에게 공개하는 것은 금으로 새겨진 초대장이 될 수 있습니다.브라우저에 오류를 전송하지 않으려면 웹 서버 오류 로그를 항상 모니터링할 수 있습니다.예를 들어 는 「에러 로그」에 .예를 들어 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
}

문제가 있는 경우는, 에러 메세지를 뱉어내, 그 문제에 직접 액세스 할 수 있습니다. 경우엔 이우,,습, 다다 in no in no no in in in in 가 없습니다.foo표의 열에서 문제를 해결하는 것은 사소한 일입니다.

선택할 경우 이 체크를 함수 또는 클래스에 포함시키고 앞서 설명한 것처럼 오류를 적절하게 처리하여 확장할 수 있습니다.

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

시험해 보다

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

먼저 데이터베이스와의 연결을 확인합니다.연결은 성공적입니까? 실패적입니까?

완료되면 다음 코드를 작성하면 정상적으로 동작합니다.

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

쿼리를 실행하기 전에 db_close()를 사용하여 데이터베이스를 닫지 않도록 하십시오.

쿼리 또는 데이터베이스 접속을 포함하는 다른 페이지를 포함하더라도 스크립트에서 여러 쿼리를 사용하는 경우 데이터베이스 접속을 닫는 db_close()를 사용할 수 있으므로 스크립트에서 이 오류가 발생하지 않도록 하십시오.

확인 중에 MySQL 오류가 나타나지 않으면 데이터베이스 테이블을 올바르게 작성했는지 확인하십시오.나한테도 이런 일이 있었어불필요한 콤마 또는 따옴표가 없는지 확인합니다.

먼저 연결을 확인하십시오.

데이터베이스에서 정확한 값을 가져오려면 다음과 같이 기록해야 합니다.

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

것을 확인할 수도 .$result array를 실행하기 에 fetch array 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'];
       }
}

일반적으로 데이터베이스 연결에 실패하면 오류가 발생하므로 데이터베이스를 연결하거나 데이터베이스 파일을 포함해야 합니다.

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);.

전통적으로 PHP는 잘못된 관행과 코드 오류에 대해 내성이 있으며, 이는 디버깅을 매우 어렵게 되었습니다.이 경우 문제는 기본적으로 mysqli와 PDO 모두 쿼리가 실패하여 반환되는 시기를 알리지 않는다는 것입니다.FALSE(비압축된 mysql 확장에 대해서는 언급하지 않습니다.준비된 스테이트먼트가 지원되기 때문에 PDO 또는 mysqli로 전환할 수 없습니다.)그러나 쿼리가 실패할 경우 항상 예외를 발생시키도록 PHP의 기본 동작을 변경할 수 있습니다.

PDO의 경우: 사용$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

error_reporting(E_ALL);

$pdo = new PDO("mysql:host=localhost;dbname=test", "test","");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$result = $pdo->query('select emal from users');
$data = $result->fetchAll();

다음과 같이 표시됩니다.

치명적인 오류:'SQLSTATE[42S22] 메시지와 함께 'PDOException' 예외 발생:열을 찾을 수 없음: 1054 행 8의 E:\htdocs\test\mysql_errors\pdo.php의 '필드 목록'에 알 수 없는 열 'emal'이 있습니다.

PDOException: SQLSTATE[42S22]:열을 찾을 수 없음: 1054 행 8의 E:\htdocs\test\mysql_errors\pdo.php의 '필드 목록'에 알 수 없는 열 'emal'이 있습니다.

보시는 바와 같이 쿼리의 문제점과 코드의 어디에 수정해야 하는지 정확하게 알 수 있습니다.

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 수 있다

치명적 오류: 회선9의 E:\htdocs\test\mysql_errors\pdo.php의 부울에 있는 멤버 함수 fetchAll()을 호출합니다.

mysqli의 경우:사용하다mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

error_reporting(E_ALL);

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'test', '', 'test');

$result = $mysqli->query('select emal from users');
$data = $result->fetch_all();

얻을 수 있을 것이다

치명적인 오류:8행 E:\htdocs\test\mysql_errors\mysqli.php의 '필드 리스트'에서 '알 수 없는 열 'emal'이라는 메시지가 표시된 예외 'mysqli_sql_exception'이 검출되지 않았습니다.

mysqli_sql_sql:8행 E:\htdocs\test\mysql_errors\mysqli.php의 '필드 목록'에 알 수 없는 열 'emal'이 있습니다.

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); ''을 받는다.

치명적 오류: 회선 10에서 E:\htdocs\test\mysql_errors\mysqli.php의 부울에서 멤버 함수 fetch_all()을 호출합니다.

물론 MySQL 오류를 수동으로 확인할 수도 있습니다.하지만 데이터베이스를 조회하고 싶을 때마다 오타를 치거나 더 나쁜 일을 할 때마다 그렇게 해야 한다면 저는 미쳐버릴 것입니다.

이 코드를 사용해 보세요. 잘 작동합니다.

변수에 포스트 변수 할당

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

언급URL : https://stackoverflow.com/questions/2973202/mysql-fetch-array-mysql-fetch-assoc-mysql-fetch-row-mysql-num-rows-etc

반응형