使用PDO INSERT不插入值

Dan*_*ira 2 php pdo

我需要一种机制,将新注册用户的数据插入数据库.我用PDO来做这个,这是我目前的代码:

$dbc = new PDO('mysql:host=localhost;dbname=*****', *****, *****);

$insert_query = $dbc->prepare('INSERT INTO members(name, gender, email, pass)   
VALUES(:name, :gender, :email, :pass) WHERE email = :email LIMIT 1');

$insert_query->execute(array(':name' => $name, ':gender' =>    
$gender, ':email' => $email,  ':pass' => $pass));
Run Code Online (Sandbox Code Playgroud)

但是,当用户提交注册表单时没有任何反应.我试图呼应$gender, $name, $email$pass,他们都表现出正确的价值观.我是PDO的新手,我不确定问题根本就是什么.它是某种语法错误,还是别的什么?

我没有收到任何错误消息.

Mic*_*ski 5

我不认为LIMITINSERT声明中包含一个条款是有效的. LIMIT不属于MySQL INSERT语法参考中的可选子句.

您还有一个WHERE子句,在INSERT语句中也是无效的.

我怀疑你没有打开错误报告,因为如果语句prepare()因语法错误而失败,这应该是一个致命错误或抛出异常.你会得到类似的错误

错误1064(42000):您的SQL语法有错误; 查看与您的MySQL服务器版本对应的手册,以便在'LIMIT 1'附近使用正确的语法

$insert_query = $dbc->prepare('INSERT INTO members(name, gender, email, pass)   
VALUES(:name, :gender, :email, :pass) WHERE email = :email LIMIT 1');
//------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

根据定义,一个INSERT语句插入完全一样多的行,你有()*在你的VALUES (),所以没有必要为一个LIMIT反正.你可以LIMIT在一个INSERT INTO...SELECT...语句中使用a ,但在这种情况下,它LIMITSELECT组件的一个子句而不是INSERT.

* 显然,忽略潜在的密钥违规或其他插入问题

WHERE,LIMITUPDATE语句中混合了多个components()的事实使我想知道你是否真的打算将它作为一个UPDATE而不是一个INSERT开头的语句. INSERT仅适用于新行. UPDATE是改变现有行,都WHERELIMIT在有效UPDATE.

那看起来像是:

$upd_query = $dbc->prepare('UPDATE members SET name = :name, gender = :gender, email = :email, pass = :pass) WHERE email = :email LIMIT 1');
Run Code Online (Sandbox Code Playgroud)