这让我发疯了。我正在尝试创建的页面是从mysql数据库中读取,然后创建一个JSON对象以返回到Angular应用程序。请加上插入的代码块,这一切都是相关的。
总体问题是:为什么我从$ term数组中获取'definition'和'type'的偏移警告,而不是其他人?
$definition = $term['definition']; (line 31)
$type = $term['type']; (line 33)
我注意到每次循环遍历数组时,它为定义和类型输出的值都是该术语的第一个字母。因此,如果该术语是“第三方费用”,则定义和类型两者仍然会收到警告,但会被赋予等于left的值($ term,1)。
由于那里有很多,特别是这两行导致警告:
但这些工作正常:
$caseName = $term['caseName'];
$caseNumber = $term['caseNumber'];
$term = $term['term'];
感谢您的帮助。我确信这么晚/早与这对我没有意义有关。
这是PHP:
$mysqli = new mysqli("localhost", "user", "pw", "db")
or die('Error connecting to the db.');
//Check for connection to database
if ($mysqli->errno) {
printf("Unable to conect to the database: %s" ,$mysqli->error);
exit();
}
$query = "Select dd.caseName, dd.caseNumber, dd.term, dd.definition, dd.type
From `ddMain` dd";
$termlist = $mysqli->query($query, MYSQLI_STORE_RESULT)
or die("Uh oh.");
while($term = $termlist->fetch_array(MYSQL_ASSOC)) {
echo "<pre>";
var_dump($term);
echo "</pre>";
$caseName = $term['caseName'];
echo "CaseName: " . $caseName . "<br />";
$caseNumber = $term['caseNumber'];
echo "CaseNumber: " . $caseNumber . "<br />";
$term = $term['term'];
echo "Term: " . $term . "<br />";
$definition = $term['definition'];
echo "Definition: " . $definition . "<br />";
$type = $term['type'];
echo "Type: " . $type . "<br />";
printf("Nm: %s, #: %s, term: %s, def: %s, type: %s", $caseName, $caseNumber, $term, $definition, $type);
}
以下是$ term的var_dump的输出:
array(5) {
["caseName"]=>
string(10) "Case name here"
["caseNumber"]=>
string(6) "123456"
["term"]=>
string(13) "Doughnut Hole"
["definition"]=>
string(168) "Some text here."
["type"]=>
string(8) "Business"
}
最后循环的输出在那里:
CaseName: Case name here
CaseNumber: 123456
Term: Doughnut Hole
Warning: Illegal string offset 'definition' in C:\xampp\htdocs\path\file.php on line 31
Definition: D
Warning: Illegal string offset 'type' in C:\xampp\htdocs\path\file.php on line 33
Type: D
Nm: Case name here, #: 123456, term: Doughnut Hole, def: D, type: D
答案 0 :(得分:1)
$term = $term['term'];
这是因为该特定行正在将$term
更改为数据库行以外的其他行。您将$term
用于数据库中返回的数组和从中提取的值之一。为其中一个使用不同的名称,您的问题就会得到解决。
一种可能性是改变:
$term = $term['term'];
echo "Term: " . $term . "<br />";
类似于:
$term2 = $term['term'];
echo "Term: " . $term2 . "<br />";