Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php PDO绑定问题_Php_Pdo - Fatal编程技术网

php PDO绑定问题

php PDO绑定问题,php,pdo,Php,Pdo,我使用PHPPDO作为db连接器。我在绑定电子邮件地址时遇到问题 假设我有一个sql $sql = UPDATE user set email = :email where uid = 10 $smt = $dbh->prepare($sql); $smt->bindParam(':email', 'xyz@gmail.com'); PDO会在@之后离开一切 Thanx用于绑定变量,而不是值。我认为您要做的是使用bindValue。bindParam用于绑定变量,而不是值。我想

我使用PHPPDO作为db连接器。我在绑定电子邮件地址时遇到问题 假设我有一个sql

$sql = UPDATE user set email = :email where uid = 10

$smt = $dbh->prepare($sql);

$smt->bindParam(':email', 'xyz@gmail.com');
PDO会在@之后离开一切


Thanx用于绑定变量,而不是值。我认为您要做的是使用
bindValue

bindParam
用于绑定变量,而不是值。我想你要做的是用
bindValue
来代替。

你说的“把每件事都放在后面”是什么意思?你的回答不正确。在这种情况下,存储过程与发送数据(更新)的I/O参数有关。正是出于这个原因,您应该使用bindParam并通过引用传递参数,以便对其进行正确计算。@cpugourou不,我的答案是100%正确的。OP正在尝试绑定一个值(字符串
)xyz@gmail.com“
),但正在使用
bindParam
,这意味着通过引用绑定变量。将此更改为
bindValue
将解决此问题。快速举例说明差异。您的答案不正确。在这种情况下,存储过程与发送数据(更新)的I/O参数有关。正是出于这个原因,您应该使用bindParam并通过引用传递参数,以便对其进行正确计算。@cpugourou不,我的答案是100%正确的。OP正在尝试绑定一个值(字符串
)xyz@gmail.com“
),但正在使用
bindParam
,这意味着通过引用绑定变量。将此更改为
bindValue
将解决此问题。在上的快速示例显示差异。
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 = ['xyz@gmail.com', 'abc@gmail.com'];
$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 */
    }
}