1

大家好,我有一个小问题。我是 PDO 的新手,我想在我的网站上实现它,我有以下代码:

foreach($liga1 as $item) {
$data = $item->get_date('j M Y, g:i a');
$titlu = $item->get_title();
$link = $item->get_permalink();
$text = $item->get_description();
$cat = "Liga 1";

$dbhost     = "localhost";
$dbname     = "site";
$dbuser     = "root";
$dbpass     = "root";

// database connection
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);

// query
$sql = "INSERT INTO stiri ('id','data', 'continut', 'link', 'titlu', 'categorie' ) VALUES (:data, :text, :link, :titlu, :categorie)";
$q = $conn->prepare($sql);
$q->execute(array(':data', $data,
                ':continut', $text,
                ':link', $link,
                ':titlu', $titlu,
                ':categorie', $cat));
}

当我运行此代码时,我收到以下错误:

Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\xampp\htdocs\ice\sql\sport2.php on line 50

如您所见,我想在数据库中插入我输入的特定类别,我在 mysql 表中也有“id”,我不知道如何使用 PDO 插入它。我也想在这里使用类,因为我需要将相同的代码放在 20 多页上。

4

2 回答 2

1

问题是您定义了 5 列,但您只提供了四个值。如果列名ID设置为AUTO_INCREMENTed 列,则可以从列列表中省略它,例如。

INSERT INTO stiri (data, continut, link, titlu, categorie ) VALUES (...) 

很快就会出现错误的另一个原因是您使用单引号将列名括起来。它将列名转换为字符串,这就是查询失败的原因。为了解决问题,请删除它们周围的单引号。

INSERT INTO stiri (id,data, continut, link, titlu, categorie ) VALUES (...)

更新 1

$sql = "INSERT INTO stiri (data, continut, link, titlu, categorie) VALUES (?, ?, ?, ?, ?)";
$q = $conn->prepare($sql);
$q->bindParam(1, $data);
$q->bindParam(2, $text);
$q->bindParam(3, $link);
$q->bindParam(4, $titlu);
$q->bindParam(5, $cat);
$q->execute();
于 2013-03-01T00:18:03.043 回答
1

你错过了 :text 。您需要为其添加另一个参数。您将其命名为 contuit 并告诉 pdo 期望 :text

于 2013-03-01T00:37:34.923 回答