我有以下简单的mysqli PHP应用程序,这应该很好地工作。 $ PK是完全接受,并且是一个有效的ARTICLE_NO,当由MySQL直接执行的查询工作完美。我已经把报表输出的每一个事件之后,所有除了同时执行家具测试产品。 while循环是从未进入过,而且我不确定为什么。

编辑:我已经缩小问题下来到0行返回的事实,但我不知道为什么在phpMyAdmin的相同的查询给出正确的结果。

EDIT2:如果我摆脱while循环的,只是有

    if (!$getRecords->fetch()) {
    printf("<p>ErrorNumber: %d\n", $getRecords->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,如果我拿走它工作正常的参数。它不是通过GET获得PK的问题,因为如果我分配$ PK = 1;相反,它仍然失败。图1是一个有效的ARTICLE_NO和SELECT ARTICLE_NAME,观看来自拍卖WHERE 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