명시 적으로 데이터 형식을 선언하는 동안 PDO :: bindParam/bindValue를 사용할 때 데이터 형식이 제공된 값과 다른 경우 예외가 throw됩니다. MySQL 데이터베이스데이터 형식이 제공된 것과 다를 경우 PDO :: bindParam/bindValue가 예외를 throw합니까?
public function insert($sql, $values){
$stmt = $this->connect()->prepare($sql);
foreach($values as $value){
$stmt->bindValue($value[1], $value[2], $value[3]);
}
$stmt->execute();
}
$array = array(
0 => array(
1 => ':jotName',
2 => 'some jot string',
3 => PDO::PARAM_STR
)
);
$iSql = "INSERT INTO `jots`(`jotContext`) VALUES (:jotName)";
$con = new sql();
try{
$con->insert($iSql,$array);
} catch(PDOException $exception) {
echo $exception->getMessage();
}
즉에 연결하는 데 사용되는 DB 클래스
발췌 PDO :: PARAM_STR이 $ array [0] [3]에서 PDO :: PARAM_INT로 변경되면 $ array [0] [2]가 int가 아닌 문자열이기 때문에 mysql 트랜잭션이 실패합니다.
PDO :: PARAM_STR, PDO :: PARAM_INT, & PDO :: PARAM_BOOL을 사용하여이 코드 블록을 테스트했습니다. _STR이 올바르게 작동하고 데이터베이스에 새 레코드를 삽입 할 것을 기대하는 동안. 삽입 메서드를 호출 할 때 _BOOL & _INT가 예외를 throw하지 않을 것으로 예상하지 않았습니다.
이 변경 될 수 있지만, MySQL의 또는 PHP는 일반적으로 경우 매개 변수를 주조한다 그들은 할 수있다. 나는 그것이 무엇이 일어나고 있는지 짐작할 것이다. http://php.net/manual/en/pdo.setattribute.php – bassxzero
확인하는 대신 typecasting 할 수 있습니다. 값이 실제로 올바른지 확인하기 위해 sql을 확인 했습니까? 제로로 바뀌는 몇 개의 jot 문자열과 같습니다. – IncredibleHat
@bassxzero - setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION)는 유일하게 설정된 속성입니다. – Jaxchief