如何回显MySQL表字段的内容?

时间:2013-08-13 02:52:52

标签: php mysqli

我似乎无法理解如何使用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);
}

2 个答案:

答案 0 :(得分:0)

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应用程序中使用此脚本时,错误将显示在用户的浏览器中。因此,您希望了解如何实现日志记录而不是直接打印它们。

答案 1 :(得分:0)

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函数也使我感到困惑,所以希望对您有所帮助!