使用简单的mysqli读取查询进行非法偏移

时间:2014-02-02 13:20:24

标签: php mysql mysqli

这让我发疯了。我正在尝试创建的页面是从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

1 个答案:

答案 0 :(得分:1)

$term = $term['term'];

这是因为该特定行正在将$term更改为数据库行以外的其他行。您将$term用于数据库中返回的数组和从中提取的值之一。为其中一个使用不同的名称,您的问题就会得到解决。

一种可能性是改变:

$term = $term['term'];
echo "Term: " . $term . "<br />";

类似于:

$term2 = $term['term'];
echo "Term: " . $term2 . "<br />";