我正在尝试使用PDO来使我的脚本更安全。我有一个演示,因此我将变量设置为此$STH->bindParam(':ip', $ip);
,然后将其称为
$DATA = $con->prepare("INSERT INTO users (ip) VALUES (':ip')");
问题是由于某种原因它没有进入数据库。这是我的完整代码:
<?php
$host = "localhost";
$dbname = "users";
$user = "root";
$pass = "root";
try{
$con = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
}
catch(PDOException $e){
echo $e->getMessage();
}
function generateRandomString($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}
$ip = generateRandomString().sha1($_SERVER['SERVER_ADDR']).generateRandomString();
$STH->bindParam(':ip', $ip);
$DATA = $con->prepare("INSERT INTO users (ip) VALUES (':ip')");
$DATA->execute();
?>
是的,我明白这不是如何让IP成为第四,我只是在玩PDO和MYSQL。
答案 0 :(得分:0)
你必须在查询之后而不是
之前绑定参数 $DATA = $con->prepare("INSERT INTO users (ip) VALUES ( :ip )");
$DATA->bindValue(':ip', $ip , PDO::PARAM_STR); // if ip column is string
$DATA->execute();
答案 1 :(得分:0)
您只能在准备查询后绑定参数,否则绑定的是什么?
$ip= generateRandomString().sha1($_SERVER['SERVER_ADDR']).generateRandomString();
$stmt= $con->prepare("INSERT INTO users (ip) VALUES (:ip)");
$stmt->bindParam(':ip', $ip);
$stmt->execute();
与bindValue
不同,bindParam
允许您在变量初始化之前或之后进行绑定,因为它使用变量引用而不是值,因此您可以在绑定后放置create $ip
。
$stmt= $con->prepare("INSERT INTO users (ip) VALUES (:ip)");
$stmt->bindParam(':ip', $ip);
$ip= generateRandomString().sha1($_SERVER['SERVER_ADDR']).generateRandomString();
$stmt->execute();
这两种情况都适用于这种情况。