我有以下简单的 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 的情况下工作,如果我去掉参数它工作正常。通过 GET 获取 pk 不是问题,因为如果我指定 $pk = 1; 相反,它仍然失败。1 是有效的 ARTICLE_NO,SELECT ARTICLE_NAME, WATCH FROM AUCTIONS WHERE ARTICLE_NO = 1 LIMIT 5 在 phmyadmin 中工作正常。
编辑:问题是 mysqli 无法处理 bigint,我现在使用 k 作为字符串,它工作正常。