2017-03-02 4 views
-1

Phalcon PHP 3.0.4를 사용하고 있는데 어떻게해야하는지 잘 모르겠습니다. 나는 다음 (사용 Phalcon PHP 선호하는 방식)을 달성 할 방법Phalcon PHP - 모델 저장/읽기/수화 과정에서 16 진수로 16 진수로 변환

CREATE TABLE `players` (
    `Id` BINARY(16) NOT NULL, 
    `Email` VARCHAR(255) NOT NULL, 
    PRIMARY KEY (`Id`), 
    INDEX `Email` (`Email`) 
) 
COLLATE='utf8_general_ci' 
ENGINE=InnoDB 
; 

:

  1. 가 또는 대시없이 중 정규 16 진수 문자열을 가지고이 MySQL의 MariaDB 테이블 스키마 감안할 때

    (예 : '15E077BCFD8511E683A600FF8A8C8699')를 Phalcon이 'Id'속성을 'Id'열에 저장하기 바로 전에 PHP에서 이진 (16)으로 변환 하시겠습니까?

  2. 'Id'열의 값을 가져 와서 이진 (16)의 16 진수 문자열로 변환하면 결과가 대시가 있거나없는 16 진수 문자열이됩니다.

나는 MariaDB의 기본 키 같은 GUID를 저장하기 위해이 문서를 따라하고 나는 진수/바이너리 변환이 정말 메모리에 모델 객체의에 Phalcon 바이너리 데이터를 저장하지 않도록 PHP에서 일어날 필요가 있음을 깨달았다. 이 '이드'항목 값이 HTTP 요청과 응답에 건네 하루의 끝에

https://mariadb.com/kb/en/mariadb/guiduuid-performance/

다른 시스템에서 사용될 수있다. 따라서 바이너리 GUID를 전달하는 것은 나를 위해 작동하지 않습니다. 따라서 DB에 들어가고 나가기 바로 전에 문자열과 바이너리간에 변환해야하는 이유는 무엇입니까?

답변

0

좋습니다. 알아 냈습니다.

PHP를 사용하여 PHP의 hex2bin() 함수를 사용하여 GUID를 생성하고이를 16 진수로 변환합니다.

지난 밤에 나는 나의 동작 방법 Unexpected 'o'에서 오류가 발생하고이 오류가 이진 데이터에 의해 생성 된 것으로 생각하여 지난 밤에 작동하지 않는 것처럼 보였습니다. 매개 변수없이 $this->response->setJsonContent()을 호출했기 때문에 오류가 발생했습니다.

최종 작업 PHP 코드

이하이다

function getGUID(){ 
    mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up. 
    $charid = strtoupper(md5(uniqid(rand(), true))); 
    $hyphen = chr(45);// "-" 
    $uuid = substr($charid, 0, 8).$hyphen 
     .substr($charid, 8, 4).$hyphen 
     .substr($charid,12, 4).$hyphen 
     .substr($charid,16, 4).$hyphen 
     .substr($charid,20,12); 
    return $uuid; 
} 

$guid = getGUID(); 
var_dump($guid); 
$player2 = new Players([ 
    "Id" => hex2bin(str_replace('-', '', $guid)), 
    "Email" => "[email protected]" 
]); 
var_dump($player2->save()); 
var_dump(bin2hex($player2->getId())); 

상기 예상대로 코드를 실행 한 결과 : GUID 값도 정확하게 MariaDB에 저장된

string(36) "C03F5B38-FF32-8D32-EC42-797A764E8684" 
bool(true) 
string(32) "c03f5b38ff328d32ec42797a764e8684" 

.

enter image description here