我有一个MySQL数据库,其中的表“ Test”具有一列“ TestData”。对于具有TestData的以下值的三个记录:“这是值1”,“这里是另一个字符串”和 “第三只为了好运”。
我编写了以下PHP代码来检索记录。
<?php
try {
$hostname = "redacted";
$username = "redacted";
$password = "redacted";
$database = "redacted";
$conn = new PDO("mysql: host=$hostname; dbname=$database", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT TestData FROM Test";
$stmt = $conn->prepare($sql);
$stmt->execute();
}
catch(PDOException $e)
{
$finalResult = $finalResult . "," . $e->getMessage();
}
echo "you are here (" . $stmt->rowCount() . ")<br>";
if ($stmt->rowCount() > 0) {
echo "found (" . $stmt->rowCount() . ")<br>";
$stmt->bind_result($td);
echo "bind successful<br>";
while ($stmt->fetch()) {
echo "testdata (" . $td . ")<br>";
}
} else {
echo "nothing found<br>";
}
?>
我收到的结果是
您在这里(3)
找到(3)
PHP脚本永远不会到达“ echo'bind success
'”语句。 “ $ stmt-> bind_result($ td);”语句挂起。
鉴于rowCount = 3,该查询似乎可以正常工作。我使用了基本上相同的结构来执行可以正常工作的INSERTS。
我在做什么问题?谢谢。
答案 0 :(得分:0)
我将代码更改为以下代码,并且可以正常工作。
<?php
$hostname = "redacted";
$username = "redacted";
$password = "redacted";
$database = "redacted";
$conn = new mysqli($hostname, $username, $password, $database);
if ($conn->connect_error) {
fwrite(STDERR, "Connection failed: " . $conn->connect_error . "\n");
exit(1);
}
$sql = "SELECT TestData FROM Test WHERE ?";
$stmt = $conn->stmt_init();
if(!$stmt->prepare($sql)) {
print "Failed to prepare statement\n";
} else {
$stmt->bind_param("s", $condition);
}
$condition = "1 = 1";
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_array(MYSQLI_NUM)) {
foreach ($row as $r) {
echo "testdata(" . $r . ")<br>";
}
}
?>
不再为我混合PDO和MySQLi。谢谢您的帮助。抱歉给您带来不便。
答案 1 :(得分:0)
如果您只是想使用php pdo从数据库中获取项目,则需要存储结果。
$results = $stmt->fetch(); //will get one row
$results = $stmt->fetchAll(); //will take all results and store in an array
希望这会有所帮助。