length
의 결과는 mysqli_fetch_fields()
에서 정확하지 않습니다.mysqli_fetch_fields()가 왜 부정확 한 결과를 내는가?
MySQL은 그러나>DESCRIBE Notices;
Field Type Null Key Default Extra
Id int(10) unsigned NO PRI (NULL) auto_increment
UserId int(10) unsigned NO MUL (NULL)
Title char(255) NO (NULL)
Name char(255) NO (NULL)
Summary text NO (NULL)
는
class Db {
public function exec($sql) {
if (!$this->link) {
$this->open();
}
if (($this->result = mysqli_query($this->link, $sql)) === false) {
throw new Exception('<b>' . __METHOD__ . '</b>: ' . $sql . ': ' . mysqli_error($this->link));
}
return true;
}
public function field_info($table) {
$sql = 'SELECT * FROM `' . $table . '` LIMIT 1';
$this->exec($sql);
return $this->field_info = $this->result->fetch_fields();
}
}
$a = $db->field_info('Notices');
print_r($a);
다음과 같은 출력을 생성합니다 : 당신이 보는 경우
// Note: "max_length" is the maximum existing length in the result set,
// while "length" is the set maximum length in the table definition.
Array
(
[0] => stdClass Object
(
[name] => Id
[orgname] => Id
[table] => Notices
[orgtable] => Notices
[def] =>
[max_length] => 1
[length] => 10
[charsetnr] => 63
[flags] => 49699
[type] => 3
[decimals] => 0
)
[1] => stdClass Object
(
[name] => UserId
[orgname] => UserId
[table] => Notices
[orgtable] => Notices
[def] =>
[max_length] => 1
[length] => 10
[charsetnr] => 63
[flags] => 53289
[type] => 3
[decimals] => 0
)
[2] => stdClass Object
(
[name] => Title
[orgname] => Title
[table] => Notices
[orgtable] => Notices
[def] =>
[max_length] => 27
[length] => 765
[charsetnr] => 33
[flags] => 4097
[type] => 254
[decimals] => 0
)
[3] => stdClass Object
(
[name] => Name
[orgname] => Name
[table] => Notices
[orgtable] => Notices
[def] =>
[max_length] => 25
[length] => 765
[charsetnr] => 33
[flags] => 4097
[type] => 254
[decimals] => 0
)
[4] => stdClass Object
(
[name] => Summary
[orgname] => Summary
[table] => Notices
[orgtable] => Notices
[def] =>
[max_length] => 26
[length] => 196605
[charsetnr] => 33
[flags] => 4113
[type] => 252
[decimals] => 0
)
)
, 당신은 볼을 그 CHAR
의보고 길이 필드가 일치하지 않습니다. DESCRIBE
이 255
인 반면, fetch_fields()
은 765
이됩니다. 왜?
길이는 바이트 단위로 어디입니까? [mysqli_fetch_fields' 문서] (http://php.net/manual/en/mysqli-result.fetch-fields.php#refsect1-mysqli-result.fetch-fields-returnvalues)에는 " 필드 정의에 지정된대로. " 또한 Windows에서만 잘못된 결과가 표시됩니다. Linux에서 동일한 스크립트를 실행하면 예상 결과, 즉 '255'가 표시됩니다. –
@SebastianZartner. 아니. PHP와 MySQL이 모두 Linux에서 실행되는 문제를보고있었습니다. (우분투와 둘 다 CentOS에서 다시.) – TRiG
위의 설명은 어제의 나의 인식이었습니다. 비록 당신이 아래에 내 대답에서 볼 수 있듯이 실제로는 OS와 관련이 없지만 오히려 기본 클라이언트 문자 집합을 통해 정의됩니다. –