mysqli fetch_assoc()将所有字段作为字符串返回

时间:2017-05-22 14:43:45

标签: php mysql mysqli php-7

是否有my.cnf(或php.ini)选项/设置会告诉php的mysqli扩展要么返回具有正确数据类型的数据(即:int / float / string)还是只是字符串?

我问,因为我在2个不同的服务器上有2个相同代码(未修改)的实例,都使用php7和mysql(mariaDB)。但是,似乎一个返回查询结果作为所有字符串,而另一个返回具有正确数据类型的查询结果。

呼叫如下:

$driver = new mysqli_driver();
$driver->report_mode = MYSQLI_REPORT_STRICT | MYSQLI_REPORT_ERROR;
$mysqli - new mysqli('p:'. $host, $user, $pass, $name);
$mysqli->set_charset('utf8');

$query = "SELECT fieldInt, fieldString FROM mytable";
$result = $mysqli->query($query);
$dataSet = array();
while($row = $result->fetch_assoc()){
   $dataSet[] = $row;
}

echo json_ecnode($dataSet);

请注意,我知道这些选项(MYSQLI_OPT_INT_AND_FLOAT_NATIVE,1);选项并了解它可能会解决问题。我想知道的是,是否有任何其他设置/选项可能会影响返回的数据类型,因为我有2个相同的实例,它们返回不同类型的数据。

1 个答案:

答案 0 :(得分:1)

并非所有SQL数值类型都可以表示为PHP int或float类型。

例如,如何将SQL int存储为PHP For Schedule = 1 To x For Ro = 1 To 86 'Annual Budget vlookup Sheet4.Cells(7 + Ro, 13 + (8 * (Schedule - 1))).Formula = "=IFERROR(VLOOKUP('Report'!" & Sheet4.Cells(7 + Ro, 3).Address(0, 0) & " , 'Budget Summary'! D5:Q85 , 5 + " & Schedule & " , False) , 0)" 'Budget to Date vlookup Sheet4.Cells(7 + Ro, 14 + (8 * (Schedule - 1))).Formula = "=(" & Sheet4.Cells(7 + Ro, 13 + (8 * (Schedule - 1))).Address(0, 0) & " * DataSheet1!E1 / 12)" 'Forecast vlookup Sheet4.Cells(7 + Ro, 17 + (8 * (Schedule - 1))).Formula = "=IFERROR(VLOOKUP('Report'!" & Sheet4.Cells(7 + Ro, 3).Address(0, 0) & " , 'DataSheet2'! Z6:AN1777 , 5 + " & Schedule & " , False) , 0)" 'Actual Spend Sheet4.Cells(7 + Ro, 15 + (8 * (Schedule - 1))).Formula =_ "=SUMIF('SC Data'! A:A , + " & Sheet4.Cells(5, 7 + (8 * Schedule)).Address(0, 0) & " & " & Sheet4.Cells(7 + Ro, 3).Address(0, 0) & " , 'SC Data'! AD:AD) " Next Ro Next Schedule

我不知道为什么两个相同的实例"正如你所说的表现不同。我怀疑它们并不像你想象的那样完全相同。