是否有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个相同的实例,它们返回不同类型的数据。
答案 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
?
我不知道为什么两个相同的实例"正如你所说的表现不同。我怀疑它们并不像你想象的那样完全相同。