PDO编写的声明插入不起作用

时间:2017-07-05 16:32:25

标签: php mysql pdo sql-insert

我绝对没有关于为什么这个准备好的声明无法返回false但没有给我任何错误的线索。我在StackOverflow上已经阅读了类似的问题,但我没有找到解决这个未知问题的任何提示。

错误已激活

public function PDOconn() {
    try {
        return new PDO($this->getDsn(), $this->username, $this->password, [PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION]);
    } catch (PDOException $e) {
        echo "Errore di connessione al database";
        throw $e->getCode();
    }
}

这是处理AJAX请求的PHP文件。我将查询插入try {} ... catch()但实际上没有帮助,因为它没有报告任何错误。 execute()只返回false

/* ***** CLASSES AUTOLOAD fn ***** */
spl_autoload_register(function ($class_name) {
    require_once '../classes/' . $class_name . '.php';
});

$db     = new database();
$conn   = $db->PDOconn();


$name   = postGet::post('name');
$email  = postGet::post('email');
$commercial = postGet::post('commercial');


try {
    $stmt = $conn->prepare('INSERT INTO newsletter_subscription(name, email, commercial) VALUES(:name, :email, :commercial)');
    $stmt->execute(array(':name' => $name, ':email' => $email, ':commercial' => $commercial));
} catch (PDOException $e) {
    $return = $e->getCode();
}

header('Content-Type: application/json; charset=utf-8');
echo json_encode($return);

变量string $namestring $emailint $commercial被正确传递,我将它们打印到php文件中。

这是表结构,其中subscriptorID是PRIMARY AI,电子邮件是UNIQUE enter image description here

[解决方案] 对我和我的短暂内存感到羞耻,但也许它可以帮助其他人:我有闪存那个数据库用户没有INSERT权限,这就是为什么查询返回的原因没有任何错误就是假的。

2 个答案:

答案 0 :(得分:0)

啊我看到commercial是一个布尔值。

使用这种传递参数的方法时,所有参数都假定为字符串。

$stmt->execute(array(':name' => $name, ':email' => $email, ':commercial' => $commercial));

在布尔值的情况下,你可能必须像这样绑定值。

$stmt->bindValue(':name', $name, PDO::PARAM_STR);
$stmt->bindValue(':email', $email, PDO::PARAM_STR);
$stmt->bindValue(':commercial', $commercial, PDO::PARAM_BOOL);

$stmt->execute();

答案 1 :(得分:-2)

bool $commercial作为整数传递,而不是布尔值。将sql中的更改为布尔值TrueFalse