Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.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_Pdo - Fatal编程技术网

Php PDO绑定/执行问题

Php PDO绑定/执行问题,php,pdo,Php,Pdo,嗨,这是我的代码,我创建了2个sqlite表示例并正确地登录了\u信息,尽管这个错误仍然会弹出 致命错误:未捕获PDOException:SQLSTATE[HY000]:常规错误:25绑定或列索引超出C:\xampp\htdocs\display.php中的范围:22 展示 您的用户名为,密码为。 ' 您的问题是,您没有绑定这两个值,而是尝试分别执行它们。要么先绑定它们,然后执行,要么同时执行它们。您还提供了3个参数,而不是两个。我看不出$\u SESSION['sample'](来自上一

嗨,这是我的代码,我创建了2个sqlite表示例并正确地登录了\u信息,尽管这个错误仍然会弹出

致命错误:未捕获PDOException:SQLSTATE[HY000]:常规错误:25绑定或列索引超出C:\xampp\htdocs\display.php中的范围:22


展示

您的用户名为,密码为。

'
您的问题是,您没有绑定这两个值,而是尝试分别执行它们。要么先绑定它们,然后执行,要么同时执行它们。您还提供了3个参数,而不是两个。我看不出
$\u SESSION['sample']
(来自上一个查询的ID)如何适应这种情况,所以只需删除它

下面是一个如何执行它的示例。请注意,
execute()
中作为参数提供的数组包含与占位符数量相同的元素,并且它们的显示顺序正确

$insertStatement = $pdo->prepare("INSERT INTO login_info (username, password) VALUES (?, ?)");
$insertStatement->execute([$user, $pword]);
您的问题是您多次尝试执行。您似乎混淆了
PDOStatement::bindParam
的语法,这将是

$insertStatement = $pdo->prepare("INSERT INTO login_info (username, password) VALUES (?, ?)");
$insertStatement->bindParam(1, $user);
$insertStatement->bindParam(2, $pword);
$insertStatement->execute();
通过对同一条语句多次调用
execute()
,您可以尝试多次执行它—如果您想插入相同类型的数据,但值不同,这很有用—这与您在此处执行的操作无关


其他需要注意的事情。。。 您当前将密码存储在会话中并直接向用户显示-强烈建议不要这样做。它看起来也像是用纯文本存储psawarks,这是一个大禁忌!使用适当的散列方法,如
password\u hash()
password\u verify()

参考和阅读材料

  • $user
    $pword
    是否携带值?
    $insertStatement = $pdo->prepare("INSERT INTO login_info (username, password) VALUES (?, ?)");
    $insertStatement->execute([$user, $pword]);
    
    $insertStatement = $pdo->prepare("INSERT INTO login_info (username, password) VALUES (?, ?)");
    $insertStatement->bindParam(1, $user);
    $insertStatement->bindParam(2, $pword);
    $insertStatement->execute();