【问题标题】:Error HY093 on executing INSERT into table执行 INSERT 到表时出现错误 HY093
【发布时间】:2019-07-01 11:13:13
【问题描述】:

这是我尝试插入的表。

当我尝试使用 pdo 进行插入时,出现以下错误:

数组( [0] => HY093 [1] => [2] => )

所有信息都来自一个 html 表单。

db 的连接正常,因为在我执行此插入操作之前,我进行了一次提取,所以这不是问题。

我已经用 echo 检查了所有变量,它们都是正确的。

还尝试将'id'列添加到sql,并赋予其值NULL,但错误与上述相同。 但是由于列'id'是自动递增的,我没有把它放在sql中。请参阅上面的代码以了解我所做的事情。

$nome = $_POST['name'];
$mail = $_POST['email'];
$psw = $_POST['pass'];
$ni = $_POST['nif']; 

这两个变量来自一个 fetch,它可以工作。它们只是在这里,因为它们属于 Insert 语句。

$roleid = $row['id'];
$rolen = $row['nome'];    

$sql = "INSERT INTO users ( nome, email, psw, nif, role_id, role_name)
VALUES ( :nome, :mail, :psw, :ni, :roleid, :rolen)";


$stmt = $db1->prepare($sql);
$stmt->bindValue('nome', $nome, PDO::PARAM_STR);
$stmt->bindValue('email', $mail, PDO::PARAM_STR);
$stmt->bindValue('psw', $psw, PDO::PARAM_STR);
$stmt->bindValue('nif', $ni, PDO::PARAM_INT);
$stmt->bindValue('role_id', $roleid, PDO::PARAM_INT);
$stmt->bindValue('role_name', $rolen, PDO::PARAM_STR);
$stmt->execute();

$error = $stmt->errorInfo();
print_r($error);

执行此插入我收到以下错误:

数组( [0] => HY093 [1] => [2] => )

【问题讨论】:

  • "对于使用命名占位符的准备好的语句,这将是一个形式为 :name 的参数名称。对于使用问号占位符的准备好的语句,这将是参数的 1 索引位置。 "因此,请尝试将您的 bindValue 第一个参数更改为包含“:”。最好看看 db 表结构,以确保您没有在列名上犯任何错误
  • 你需要:email 而不是:mail
  • @LuisLuisMaiaMaia 你可以随意调用参数。但你必须在bindValue()中使用相同的名称。
  • 正如@PaulSpiegel 所注意到的,您应该修复所有bindValue 调用。您显然不理解占位符将被绑定值替换。因此,例如,如果您有 roleid 占位符,但绑定 role_id - 它将不起作用

标签: php mysql forms pdo


【解决方案1】:

这是问题的解决方案,我没有在 bindValue() 函数中使用相同的名称

$name = $_POST['name'];
$email = $_POST['email'];
$psw = $_POST['psw'];
$nif = $_POST['nif'];
$roleid = $row['id'];
$rolen = $row['nome'];

$sql = "INSERT INTO users ( nome, email, psw, nif, role_id, role_name)
        VALUES ( :name, :email, :psw, :nif, :roleid, :rolen)";

$stmt = $db1->prepare($sql);
$stmt->bindValue(':name', $name, PDO::PARAM_STR);
$stmt->bindValue(':email', $email, PDO::PARAM_STR);
$stmt->bindValue(':psw', $psw, PDO::PARAM_STR);
$stmt->bindValue(':nif', $nif, PDO::PARAM_INT);
$stmt->bindValue(':roleid', $roleid, PDO::PARAM_INT);
$stmt->bindValue(':rolen', $rolen, PDO::PARAM_STR);
$stmt->execute();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    相关资源
    最近更新 更多