Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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
为什么不是';t PHP';s";密码“U散列”;返回字符串?_Php_Php Password Hash - Fatal编程技术网

为什么不是';t PHP';s";密码“U散列”;返回字符串?

为什么不是';t PHP';s";密码“U散列”;返回字符串?,php,php-password-hash,Php,Php Password Hash,您的错误在这一行: <?php $connection=new PDO("mysql:host=localhost;dbname=userdata", "secure_credentials", "battery_staple"); $user=$_POST['username1']; $pass=$_POST['password1']; $snip=mb_substr($user, 0, 3); $pass=password_hash($pass,

您的错误在这一行:

<?php
    $connection=new PDO("mysql:host=localhost;dbname=userdata", "secure_credentials", "battery_staple");
    $user=$_POST['username1'];
    $pass=$_POST['password1'];
    $snip=mb_substr($user, 0, 3);
    $pass=password_hash($pass, PASSWORD_BCRYPT);
    $user_query=$connection->prepare("INSERT INTO login (email, password, semod, snippet) VALUES (:email, :password, :semod, :snippet)");
    $user_query->bindParam(':email', $user);
    $user_query->bindParam(':password', $pass);
    $user_query->bindParam(':semod', "false");
    $user_query->bindParam(':snippet', $snip);
    $user_query->execute;
您需要使用
bindValue

$user_query->bindParam(':semod', "false");
bindParam
通过引用传递第二个参数,因此它必须是变量,而不是文本

此外,不需要绑定已知值。您可以同样轻松地将文本
'false'
字符串添加到语句查询中,即

$user_query->bindValue(':semod', "false");

字段错误,问题是
:semod
占位符。您很少尝试传递不能在
bindParam
中使用的字符串文字(“false”)。使用
bindValue
代替可能重复的带有行号的错误消息。既然我敢打赌行号指向
:semod
行,那么你怎么会认为错误是在
密码\u散列中出现的呢?仅供参考-MySQL有一个比字符串“false”更合适的字符串,而字符串“false”是真实的nature@Phil哎呀,如果没有别的,它会显示错误消息在屏幕上“数组方案”(从0开始)。顺便说一句,将bindParam用于仅输入参数有什么意义吗?@MattiVirkkunen Handy在一个绑定的引用值可能会改变的循环中使用。如果您的意思是将它用于硬编码参数有什么意义,那就没有什么意义了。但它可以使查询更易于阅读。@Barmar您应该添加它(硬编码参数)这绝对值得指出,已知值不需要binding@Barmar希望你不介意,我把它添加到了你的答案中。然后我投了更高的票。感觉有点奇怪:)
"INSERT INTO login (email, password, semod, snippet) VALUES (:email, :password, 'false', :snippet)"