Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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_Mysql_Pdo_Sql Insert - Fatal编程技术网

Php PDO准备好的语句插入不起作用

Php PDO准备好的语句插入不起作用,php,mysql,pdo,sql-insert,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_EXCEPTIO

我完全不知道为什么这个准备好的声明不起作用,返回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$name
string$email
int$commercial
被正确传递,我将它们打印到php文件中

这是一个表结构,其中subscriptorID是主要AI,email是唯一的


[SOLUTION]我和我的内存不足感到羞耻,但也许它可以帮助其他人:我有一个闪存,该DB用户没有插入特权,这就是为什么查询返回false而没有任何错误。
bool$commercial
作为整数而不是布尔值传递。在sql中将其更改为布尔值,即
True
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);
使用此传递参数的方法时,所有参数都假定为字符串

$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();

您是否收到任何错误消息?我的错误,
$commercial
现在是
int
。无论如何,我试着按照您的建议手动绑定params(使用
PDO::PARAM_INT
),但它仍然不起作用,也没有打印任何错误消息这是我的错,它是
INT$commercial
。但无论如何,据我所知,在MySQL中,
INT(1)
被认为是
BOOLEAN
删除它,看看这是否是问题所在。