평소와 마찬가지로 저는 PHP를 사용하여 모범 사례를 살펴 보았으며 준비된 문구가 지금 내 눈을 감 으려면 어떻게해야할까요? 그래서 나는 발견 한 몇 가지 예를 가지고 놀기 시작했습니다. 스크립트를 실행할 때bindParam()에서 Mysqli Prepared Statement가 작동하지 않습니다.
이 나는이 오류를 가지고 :
Fatal error: Call to a member function bindParam() on a non-object in /opt/lampp/htdocs/phpSecurity/PreparedStatments/Insert-Multi-Binded-Params/Insert Simple Method.php on line 10
을 여기 코드를 간다.
Method.php
<?php
require_once '../config.php';
$stmt = $db->prepare("INSERT INTO coisas (nome, telefone, bi) VALUES (?, ?, ?)");
$nome = 'Fabio Antunes';
$telefone = 916810641;
$bi = 123093456;
$stmt->bindParam(1, $nome);
$stmt->bindParam(2, $telefone);
$stmt->bindParam(3, $bi);
$stmt->execute();
$stmt->close();
$db->close();
?>
config.php를
<?php
$server_host = 'localhost';
$server_user = 'root';
$server_password = '';
$server_db = 'PreparedStatements';
$db = new mysqli($server_host, $server_user, $server_password, $server_db);
?>
간단한 삽입하지 내가 여기에 잘못하고 있어요 무엇인지,이 php.net에서 발견 유사한 예는, 왜 일하지 않는거야? 추 신 : mysqli 연결은 SELECT 명령으로 준비된 문을 수행하기 위해 사용했기 때문에 문제가되지 않습니다. 그리고 꽤 잘했습니다.
편집
해상도와 이유.
글쎄 example에 나는 쿼리의 각 값에 대해 bind_param()
을 사용해야합니다. 하지만 Bart 덕분에 그는 제 코드로 문제를 해결할 수있었습니다. 그것이
는 :
$stmt->bindParam(1, $nome);
$stmt->bindParam(2, $telefone);
$stmt->bindParam(3, $bi);
이 있어야한다 "SII"이 무엇인지 궁금 수있는 사람들을 위해 이제
$stmt->bind_param("sii", $nome, $telefone, $bi);
.
글쎄 bind_param은 "$ var"를 각 물음표에 "?"바인딩합니다. 순서대로.
따라서 하나만 사용하면 bind_param()
을 모두 동시에 바인딩 할 수 있으며 보통 bind_param()
을 사용하면 바인딩되는 데이터 유형을 지정해야합니다.
바인딩 할 첫 번째 값은 $nome
"s"로 지정된 문자열입니다.
다른 사람은 $telefone
과 $bi
은 "i"를 가지고 있기 때문에 정수입니다.
여기 비슷한 문제가있는 다른 사람들은 다른 데이터 유형 (php.net)을 사용합니다.
i = Integer;
s = String;
d = Double;
b = Blob;
누군가 더 좋은 설명으로 게시하거나 의견을 남기십시오. 그래서 나는 내 자신을 향상시킬 수 있습니다.
감사합니다.
모범 사례에 대한 좋은 제안. 시도했지만 문제가 해결되지 않았습니다. 다른 생각? –
$ stmt-> bind_param ("sii", $ nome, $ telefone, $ bi); 일했다. –
반갑습니다. –