Php SQLSTATE[HY093]:参数编号无效:未定义参数#
我正在编写一些代码,通过以下代码与phpmyadmin上的登录数据库交互 但是,我得到以下错误,它没有指定错误发生在哪一行。这困扰了我三天,我的研究没有找到任何解决办法。以防万一:SQLSTATE[HY093]:参数编号无效:未定义参数 有人能帮我找出问题所在吗 先谢谢你Php SQLSTATE[HY093]:参数编号无效:未定义参数#,php,mysql,Php,Mysql,我正在编写一些代码,通过以下代码与phpmyadmin上的登录数据库交互 但是,我得到以下错误,它没有指定错误发生在哪一行。这困扰了我三天,我的研究没有找到任何解决办法。以防万一:SQLSTATE[HY093]:参数编号无效:未定义参数 有人能帮我找出问题所在吗 先谢谢你 <?php session_start(); $user_name = "test" ; $user_password = "test"; /* Login to database */ $DB_name = "ad
<?php
session_start();
$user_name = "test" ;
$user_password = "test";
/* Login to database */
$DB_name = "adaming_login_db";
$DB_user = "root";
$DB_pass = "";
$DB_host = "localhost";
try
{
$DB_con = new PDO("mysql:host={$DB_host};dbname={$DB_name}",$DB_user,$DB_pass);
$DB_con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
echo $e->getMessage();
}
class USER
{
private $db;
public function __construct($DB_con)
{
$this->db = $DB_con;
}
public function login($user_name,$user_password)
{
try
{
$stmt = $this->db->prepare("SELECT * FROM login_info WHERE user_name = :$user_name AND user_password = :$user_password");
$stmt->execute(array(':user_name'=>$user_name, ':user_password'=>$user_password));
$userRow=$stmt->fetch(PDO::FETCH_ASSOC);
if($stmt->rowCount() > 0)
{
if($user_password == $userRow['user_password'] && $user_name == $userRow['user_name'] )
{
$_SESSION['user_session'] = $userRow['user_id'];
echo "Success";
return true;
}
else
{
echo "Failed";
return false;
}
}
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}
}
$user = new USER($DB_con);
$user->login($user_name,$user_password);
?>
您需要从查询中删除美元符号。更改:
$stmt = $this->db->prepare("SELECT * FROM login_info WHERE user_name = :$user_name AND user_password = :$user_password");
到
您使用的是双引号,因此在sql字符串中解析变量
$user\u name
等。您需要删除sql中的美元符号。您好jeroen,感谢您的回复,我尝试删除美元,但它会带来其他语法错误,可能我在错误的行中执行了此操作。我还是一个php初学者,你能告诉我哪些语法需要修改吗?@YHr:但是,你的代码还有一个问题——你似乎用明文保存密码,这是一个糟糕的做法——你应该使用/来代替。是的,我知道这一点,我只是想在进一步改进代码之前测试代码是否正常工作。谢谢你指出这一点。
$stmt = $this->db->prepare("SELECT * FROM login_info WHERE user_name = :user_name AND user_password = :user_password");