PHP&MySQL:zerofillを紛失した利用の場合mysqli->prepare()
-
26-10-2019 - |
質問
利用:MySQL5.1+PHP5.3.5
MySQL:
id in "table" is defined as: mediumint(6) zerofill not null
を取得します期待された結果利用の場合:
$mysqli->query("SELECT id FROM table WHERE id = 1");
while($row = $ret->fetch_array(MYSQLI_ASSOC)) $arr[] = $row;
>>> $arr[0]["id"] = 000001
な利用の場合意書:
$ret = $mysqli->prepare("SELECT id FROM table WHERE id = ?");
call_user_func_array(array($ret,"bind_param"),array("i",1));
$ret->execute();
$ret->store_result();
$meta = $ret->result_metadata();
$fields = $meta->fetch_fields();
$cols = array(); $data = array();
foreach($fields as $field) $cols[] = &$data[$field->name];
call_user_func_array(array($ret, 'bind_result'), $cols);
while($ret->fetch()) {
$row = array();
foreach($data as $key => $val) $row[$key] = $val;
$arr[] = $row;
}
>>> $arr[0]["id"] = 1
していこうとの声を直接MySQLのコンソールで期待どおりに事(MySQL).
によるPHP mysqli_stmt::bind_result 文書のためのシェア:
によってはカラム種類の結合変数で黙々と変化の 対応するPHPのタイプです。
いので、末尾のゼロをなくしていますので、後。多くの分野zerofillの工程はほぼ自動化からのデータを画面にて修正この後このコードが必要となる市長は変わります。
他のヒントをいかにこの問題を解決することを歓迎する。
解決 3
他の溶液を指定する場として小数点(6,0).何らかの理由で動作す(変更なしのコードが必要です。
他のヒント
のzerofillさまが迷子になってしまったので、mysqliであることを知りカラムは整数型のタイプのphpの変数となりまintなどの先頭に迷ってしまうほど。
このえのみされるようにすることがご利用の準備には、発言と発言間の関係を明確mysqli(PDOされていないように見えてきました。
防mysqliの型変数の整数を変更するタイプのMySQLるものが返される文字列として返します。
方法が二つあります:
CAST(intCol AS CHAR)
かぶりの整数を含む先行するゼロ、文字列になります。- のzerofilled整数文字列、例えば
CONCAT(intCol, "")
.
注意:ご利用の場合この値は、HTML5入力フィールドの型 number
, このまま剥先頭に(少なくとも一部のブラウザ).この問題を解決するのでしょ この答え.
一時、私は解決で追加することで、ライン:
define("ZEROFILL_FLAG",64);
$zeros = array();
foreach($fields as $field) {
$zeros[$field->name] = $field->flags & ZEROFILL_FLAG ? $field->length : 0;
$cols[] = &$data[$field->name];
}
call_user_func_array(array($ret, 'bind_result'), $cols);
while($ret->fetch()) {
$row = array();
foreach($data as $key => $val) {
$row[$key] = $zeros[$key] > 0 ? sprintf('%0'.$zeros[$key].'s', $val) : $val;
}
$arr[] = $row;
}
まだ思うので見せてくれより良い解決方法の一つです。
所属していません StackOverflow