Pergunta

Eu tenho a seguinte aplicação mysqli php simples, que deve funcionar bem. $ Pk é aceita perfeitamente e é um ARTICLE_NO válido, e a consulta funciona perfeitamente quando executado diretamente pelo mysql. Eu coloquei instruções de saída após cada evento e todos, exceto tetsing enquanto executa. O loop while nunca é introduzido, e tenho a certeza porquê.

edit:. Tenho estreitou o problema para baixo para o fato de que 0 linhas são devolvidas, mas não tenho idéia de por que a mesma consulta no phpMyAdmin dá o resultado correto

edit2: se me livrar do loop while e só tem

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

Ela mostra que a errno é 0. Portanto, há registros são buscados, e não há nenhum erro, mas é uma consulta válida.

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

edit:

Eu tentei com este código:

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

Isso funciona sem $ pk, se eu tirar os parâmetros que ele funciona bem. Não é um problema com a obtenção de pk via GET, porque se eu atribuir R $ pk = 1; em vez disso, ainda falha. 1 é um ARTICLE_NO válido e ARTICLE_NAME SELECT, assistir a partir leilões onde ARTICLE_NO = 1 LIMITE 5 funciona bem no phmyadmin.

edit:. O problema era que mysqli não poderia lidar com bigint, agora estou usando k como uma string e ele funciona muito bem

Foi útil?

Solução

Verifique o valor de:

$getRecords->num_rows

que deve ajudar a revelar se o SELECT anterior é realmente retornando quaisquer dados

Você pode precisar também adicionar:

$getRecords->store_result()

primeiro para garantir que você tenha toda a consulta for concluída antes de pedir o número de linhas no conjunto de resultados.

Também - Certifique-se de lançar $pk para um inteiro! É possível que o valor que está sendo passado está ficando mutilado.

Outras dicas

Eu não tenho certeza se você modificou esse código, mas você não parecem estar selecionando o banco de dados que você deseja conectar-se lá.

Use mysqli_select_db (...) para que, se esse é o problema.

EDIT: Também parece que você está usando letras maiúsculas para a coluna, o nome da tabela etc

.

Obter sensibilidade caso certo, pode ser que você está presumindo caso insensibilidade porque trabalha na linha de comando. Tanto quanto eu sei o motorista mysqli em PHP é case sensitive sobre, pelo menos, os nomes das colunas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top