我似乎无法理解如何使用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);
}
答案 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函数也使我感到困惑,所以希望对您有所帮助!