문제

다음과 같은 간단한 mysqli php 애플리케이션이 있는데, 잘 작동할 것입니다.$pk는 완벽하게 허용되며 유효한 ARTICLE_NO이며 쿼리는 mysql에서 직접 실행할 때 완벽하게 작동합니다.실행하는 동안 테스팅을 제외한 모든 이벤트와 모든 이벤트 뒤에 출력 문을 넣었습니다.while 루프는 입력되지 않으며 이유가 확실하지 않습니다.

편집하다:0 행이 반환된다는 사실로 문제의 범위를 좁혔지만 phpmyadmin의 동일한 쿼리가 올바른 결과를 제공하는 이유를 알 수 없습니다.

편집2:while 루프를 제거하고 그냥

    if (!$getRecords->fetch()) {
    printf("<p>ErrorNumber: %d\n", $getRecords->errno);
}

errno가 0임을 보여줍니다.따라서 레코드를 가져오지 않고 오류도 없지만 유효한 쿼리입니다.

<?php
ini_set('display_errors', '1');
error_reporting(E_ALL);
$pk = $_GET["pk"];
$con = mysqli_connect("localhost", "", "", "");
if (!$con) {
    echo "Can't connect to MySQL Server. Errorcode: %s\n". mysqli_connect_error();
    exit;
}
$con->set_charset("utf8");
echo "test outside loop";
if(1 < 2) {
    echo "test inside loop";
    $query1 = 'SELECT ARTICLE_NO FROM AUCTIONS WHERE ARTICLE_NO = ?';
    if ($getRecords = $con->prepare($query1)) {
echo "inside second loop";
        $getRecords->bind_param("i", $pk);
echo "test after bind param";
        $getRecords->execute();
echo "test after bind execute";
        $getRecords->bind_result($ARTICLE_NO);
echo "test after bind result";
        while ($getRecords->fetch()) {
            echo "test inside while";
            echo "<h1>".$ARTICLE_NO."</h1>";
        }
    }
}

편집하다:

이 코드로 시도했습니다.

<?php
$mysqli = new mysqli("localhost", "", "", "");
$pk = $_GET["pk"];
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}
/* prepare statement */
if ($stmt = $mysqli->prepare("SELECT ARTICLE_NAME, WATCH FROM AUCTIONS WHERE ARTICLE_NO = ? LIMIT 5")) {
    $stmt->bind_param("i", $pk);
    $stmt->execute();
    /* bind variables to prepared statement */
    $stmt->bind_result($col1, $col2);
    /* fetch values */
    while ($stmt->fetch()) {
        printf("%s %s\n", $col1, $col2);
    }
    /* close statement */
    $stmt->close();
}
/* close connection */
$mysqli->close();
?>

이것은 $pk 없이 작동합니다. 매개변수를 제거하면 제대로 작동합니다.$pk = 1; 을 할당하면 GET을 통해 pk를 얻는 데에는 문제가 없습니다.대신 여전히 실패합니다.1은 유효한 ARTICLE_NO이고 ARTICLE_NAME을 선택하고 ARTICLE_NO = 1 LIMIT 5인 경매에서 시청하면 phmyadmin에서 제대로 작동합니다.

편집하다:문제는 mysqli가 bigint를 처리할 수 없다는 것이었습니다. 이제 k를 문자열로 사용하고 있는데 잘 작동합니다.

도움이 되었습니까?

해결책

다음 값을 확인하세요.

$getRecords->num_rows

이는 이전에 SELECT 실제로 모든 데이터를 반환하고 있습니다.

다음을 추가해야 할 수도 있습니다.

$getRecords->store_result()

먼저 결과 집합의 행 수를 요청하기 전에 전체 쿼리가 완료되었는지 확인하세요.

또한 - 꼭 캐스팅하세요 $pk 정수로!전달되는 값이 손상될 가능성이 있습니다.

다른 팁

해당 코드를 수정했는지는 확실하지 않지만 거기에 연결하려는 데이터베이스를 선택하지 않은 것 같습니다.

그것이 문제라면 mysqli_select_db(...)를 사용하십시오.

편집하다:또한 열, 테이블 이름 등에 대문자를 사용하고 있는 것 같습니다.

대소문자를 올바르게 구분하십시오. 명령줄에서 작동하기 때문에 대소문자를 구분하지 않는다고 가정할 수 있습니다.내가 아는 한, PHP의 mysqlI 드라이버는 최소한 열 이름에 대해 대소문자를 구분합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top