php PDOをdbコネクタとして使用しています。私は、電子メールアドレス の結合に問題が生じています、私はPDOは、@の後にすべてのものを残しているSQLphp PDOバインディングの問題
$sql = UPDATE user set email = :email where uid = 10
$smt = $dbh->prepare($sql);
$smt->bindParam(':email', '[email protected]');
を持っていると言います。
php PDOをdbコネクタとして使用しています。私は、電子メールアドレス の結合に問題が生じています、私はPDOは、@の後にすべてのものを残しているSQLphp PDOバインディングの問題
$sql = UPDATE user set email = :email where uid = 10
$smt = $dbh->prepare($sql);
$smt->bindParam(':email', '[email protected]');
を持っていると言います。
bindParam
ありがとうは変数ではなく、値をバインドするために使用されます。あなたがしたいことは、代わりにbindValue
を使用することだと思います。
答えが間違っていますか?この場合、ストアドプロシージャはI/Oパラメータ送信データ(UPDATE)に関連しています。このような理由から、bindParamを使用して、パラメータを適切に評価するために参照渡しする必要があります。 – cpugourou
@cpugourouいいえ、私の答えは100%正しいです。 OPは値(文字列 '' xyz @ gmail.com ')をバインドしようとしていますが、バインド変数を参照するためのものである 'bindParam'を使用しています。これを 'bindValue'に変更するとこれが修正されます。違いを表示するにはhttps://3v4l.org/8kjBdの簡単な例を参照してください。 – mfonda
define("SQLHOST", "127.0.0.1");
define("SQLUSER", "user");
define("SQLPASS", "password");
define("SQLSGBD", "database");
try {
$dbh = new PDO('mysql:host=' . SQLHOST . ';dbname=' . SQLSGBD . ';charset=UTF8', SQLUSER, SQLPASS);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
var_dump('Connection failed: ' . $e->getMessage());
}
$emailList = ['[email protected]', '[email protected]'];
$stmt = $dbh->prepare("UPDATE user set email = ? where uid = 10");
foreach ($emailList as $key => $email) {
$stmt->bindParam(1, $email, PDO::PARAM_STR);
$stmt->execute();
$obj = $stmt->fetchall(PDO::FETCH_ASSOC);
if (count($obj) !== 0) {
/* whatever */
}
}
"@の後にすべてのものを残してください"とはどういう意味ですか? –