【问题标题】:How do I echo the contents of a MySQL table field?如何回显 MySQL 表字段的内容?
【发布时间】:2013-08-13 02:52:52
【问题描述】:

我似乎无法理解如何使用 PHP/MySQLi 正确使用 MySQL 数据库中的信息的概念。据我了解,您生成一个表示连接对象的变量:

$connectionObject = mysqli_connect('serverString', 'userString', 'passString', 'databaseString');

然后,生成一个代表您要使用的查询字符串的变量:

$queryString = "SELECT rowName FROM tableName";

然后,生成一个表示从成功查询返回的结果对象的变量:

$resultObject = mysqli_query($connectionObject, $queryString);

然后,您使用 fetch_assoc() 函数从结果对象生成一个数组并将其分配给一个变量:

$resultArray = myqli_fetch_assoc($resultObject);

然后,您可以使用 while 循环(我对这个有问题)对数组进行排序并以某种方式使用该行的内容:

while ($resultArray) {
echo $resultArray["rowName"];
}

我的这个概念是不是有错误的方式,因为它对我不起作用,甚至输出基于文本的 CHAR(10) 字段的文本内容,其内容不超过:“BLAH”。

在我看来,最终需要循环遍历数组以按名称挑选数组项似乎没有意义,但无论我在哪里看,我都会找到相同的概念。

我的脚本代码,减去一些关键细节,是:

if ($connectionObject=mysqli_connect("host0", "username0", "password0", "mysqldatabase0")) {
echo "Con";
}

if ($queryString="SELECT 'testdata' FROM 'testtable'") {
echo "Query";
}

if ($resultObject=mysqli_query($connectionObject, $queryString)) {
echo "Result";
}

if ($resultArray=mysqli_fetch_assoc($resultObject)) {
echo "Array";
}

while ($row=$resultArray) {
echo $row["testdata"];
print_r ($row);
}

【问题讨论】:

  • print_r($resultArray) 你得到了什么?
  • 我应该把它放在流程的什么地方?
  • 而不是while循环,如果你得到一个数组检查vinod的答案
  • 如果结果对象失败。我的格式不正确吗?

标签: php mysqli


【解决方案1】:

mysqli_fetch_assoc 返回一个关联的字符串数组,表示结果集中提取的行,即您的$resultObject

问题在于您使用while 循环的位置。您想在一个变量中捕获返回的关联数组并通过该变量访问您的数据,如下所示:

while ($row = $resultArray) {
    echo $row["rowName"];
}

要按rowName 排序,您可以在查询中使用mysql order by 子句,如下所示,它会返回按rowName 排序的结果:

$queryString = "SELECT rowName FROM tableName order by rowName";

OP 发布完整代码后更新:

在您的第一个 if 语句中,如果连接失败会发生什么?你想在那里添加一些错误处理:

$connectionObject=mysqli_connect("host0", "username0", "password0", "mysqldatabase0"));
if (!$connectionObject) {
    // exist out of this script showing the error
    die("Error connecting to database " . mysqli_error($connectionObject));
} else {
    // Don't really need this else but I'll keep it here since you already had it
    echo "Con";
}

问题出在这里您使用单引号作为 mysql 标识符的列名和表名。 MySQL 标识符引号字符是反引号而不是单引号。
如果这些标识符之一是 mysql 保留字 (MySQL Reserved words) 之一,则基本上您需要使用反引号,对于其他情况,您不需要使用它们。

更新您的查询:

if ($queryString="SELECT `testdata` FROM `testtable`") {
    echo "Query"; // Leaving as is, not required
}

最后,一个改进。您也想在此处添加错误处理:

if ($resultObject=mysqli_query($connectionObject, $queryString)) {
  echo "Result"; // Leaving as is, not required
} else {
  echo "Error executing Query " . mysqli_error($connectionObject);
}

请注意,当您使用此脚本时,错误消息将在客户端打印,即当您在 Web 应用程序中使用此脚本时,错误将显示在用户的浏览器中。因此,您想研究实现日志记录而不是直接打印它们。

【讨论】:

  • 如何显式引用行的内容?
  • @AngelitoUrra-Bazain,我不确定你的意思。你试过我发布的while循环吗?请在echo $row["rowName"]; 之后添加print_r($row); 并在此处发布结果并指定结果的格式。
  • 还是有问题。似乎我没有得到正确的东西。是 $query = "SELECT 'row1' FROM 'table1'"; if ($array = query($connection, $query)) { while(blahblah) } 语法正确吗?
  • 有什么错误吗?我希望这行是因为你输入它而不是复制粘贴,请仔细检查这行$resultArray = myqli_fetch_assoc($resultObject);,它应该是$resultArray = mysqli_fetch_assoc($resultObject);
  • 对不起,我如何知道查询是否成功?我正在尝试:if ($resultObject = mysqli_query($connectionObject, $queryString) {echo "success"},但它似乎不起作用。
【解决方案2】:

mysqli_fetch_assoc() 返回一行作为 mysqli_result 对象的关联数组。每次调用时,它都会自动返回下一行结果,当与 while 循环一起使用时,可用于获取未知数量的结果行。

$row['columnName'] 用于引用列。例如,如果您有一个包含 firstName、lastName、dateOfBirth 列的人员对象,您可以使用 while 循环遍历每个人:

while($row=mysqli_fetch_assoc($resultObject)){
 $fname = $row['firstName'];
 $lname = $row['lastName'];
 $dob = $row['dateOfBirth'];
 echo $fname . ' ' . $lname . ' ' . $dob;
}

这将回显返回未知人数的结果的详细信息。

记住,调用

if ($resultArray=mysqli_fetch_assoc($resultObject)) {
echo "Array";
}

在while循环将跳过第一个结果之前,因此请确保在测试时查询返回多个结果,就好像您只提供一个包含一个结果的resultObject,这可能是它没有返回任何内容的原因。 检查是否返回任何结果的更好方法是使用 mysqli_num_rows($resultObject) 函数。

if(mysqli_num_rows($resultObject) > 0){
echo "Array";
}

也不确定这是否只是一个错字,但可以肯定的是,在您的查询中,您选择的是 columnName 而不是 rowName:

$queryString = "SELECT columnName1(eg. firstName), columnName2(eg. lastName) FROM tableName";

我最近刚开始学习PHP,mysqli_fetch_assoc函数也让我很困惑,所以希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 2017-01-31
    • 1970-01-01
    • 2018-09-09
    • 2018-07-22
    • 1970-01-01
    • 2018-10-02
    相关资源
    最近更新 更多