php - SQLSTATE[42000] : Syntax error while syntax is OK

标签 php mysql pdo

我对我的简单插入所产生的错误感到非常困惑。我已经通过不同的检查器多次检查了语法并搜索了类似的问题,但没有找到解决方案。

错误看起来像这样:

'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' , , , , , , , , , , , , , , )' at line 1' in 

我的代码基本上是这样的:

$yhteys = new PDO('mysql:host=localhost;dbname=XXXX', 'YYYY', 'ZZZZ');
$kysely = $yhteys->prepare("INSERT INTO hakija (Kutsumanimi, Etunimet, Sukunimi, SyntymAika, Syntymapaikka, Sahkoposti, Puhelinnumero, Postiosoite, Postinumero, Postitoimipaikka, Maa, Suosittelija, IPos, Lahetysaika, Vapaa_sana, Sosme) VALUES ($nimi, $etunimet, $sukunimi, $saika, $spaikka, $email, $puhelin, $osoite, $postinro, $postitmp, $maa, $suosittelija, $IPos, $lahetysaika, $vapaasana, $sosme)");
$kysely->execute();

如果我直接通过 phpMyAdmin 使用此 INSERT,它可以工作,但是从 php..任何人都可以帮助我吗?

PHP: native (5.4) MySQL 5.6

最佳答案

您应该使用准备好的语句。它将防止 sql 注入(inject),并且您不必处理变量类型

$yhteys = $dbh->prepare("INSERT INTO hakija (Kutsumanimi, Etunimet,...) VALUES (:kutsumanimi, :ktunimet, ...)");
$yhteys ->bindParam(':kutsumanimi', $kutsumanimi);
$yhteys ->bindParam(':ktunimet', $ktunimet);
...
$yhteys ->execute();

看看这里:http://php.net/manual/en/pdo.prepared-statements.php

关于php - SQLSTATE[42000] : Syntax error while syntax is OK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33493002/

相关文章:

php - 防止 str_replace 注释字符串中的 php 代码

PHP 图片在上传到指定目录之前调整大小

mysql - 如何使用 MYSQL 将字符串拆分为表中的多行?

php - 以特定时间间隔从数据库中检索数据到文件中

php - SQLSTATE[01002] Adaptive Server 连接失败(严重性 9)

php - 最佳服务器端语法高亮解决方案(在 PHP 中)

php - 将特殊 PHP 文件重定向到子域

php - PDO 为 foreach() 提供的参数无效

php - 在 PHP 中使用 api 时出现 SQL 语法错误

php - Phalcon PHP 扩展和覆盖 "update"和 "insert"函数