为了账号安全,请及时绑定邮箱和手机立即绑定

在 mariadb 存储过程中设置 PHP 变量;SQLSTATE[42S22]:未找到列

在 mariadb 存储过程中设置 PHP 变量;SQLSTATE[42S22]:未找到列

PHP
绝地无双 2021-11-05 15:28:13
我目前正在尝试为网站编写登录/注册功能。当使用 php 连接到 mariadb 时,我想在新用户注册时调用一个存储过程将数据输入到数据库中。在 php 中调用该过程后,我想将两个变量(电子邮件和密码)加载到该过程中。然后程序应该将它们(如果我理解正确的话作为程序参数)写入相关表中。到目前为止我的代码的问题是,它似乎采用变量值(这很好)并尝试找到一个名为该值的列(这不是我想要的)而不是将这些值写入相关列(这是我想要的)。所以我相信,一旦我了解如何在 mariadb 的存储过程中正确声明变量,我就可以解决它?(是的,我尝试在数据(电子邮件,密码)以及值(电子邮件,密码)周围放置单引号和双引号。我尝试了 INOUT 而不是 IN。我在 test() 和 VALUES() 中尝试将 @email 作为变量定义。我尝试更改 php 变量和存储过程参数的名称。mariadb 存储过程:    DELIMITER //    MariaDB [login_input]> CREATE OR REPLACE PROCEDURE test(IN email     VARCHAR(150),IN password VARCHAR(255))        -> BEGIN        -> INSERT INTO data(email, password)        -> VALUES (email, password);        -> END;        -> //mariadb 表:    MariaDB [login_input]> DESCRIBE data;    +----------+--------------+------+-----+---------+-------+    | Field    | Type         | Null | Key | Default | Extra |    +----------+--------------+------+-----+---------+-------+    | email    | varchar(150) | NO   | PRI | NULL    |       |    | password | varchar(255) | NO   |     | NULL    |       |    +----------+--------------+------+-----+---------+-------+它目前是空的:    MariaDB [login_input]> SELECT * FROM data;    Empty set (0.00 sec)相关php代码:预定义变量:    $email = "test";    $password = "test123";使用 PDO 建立连接(如果那很重要)。执行php代码时提示的错误:抱歉,未建立连接。SQLSTATE[42S22]: Column not found: 1054 Unknown column 'test' in 'field list'
查看完整描述

1 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

更好的是使用 prepare()/execute() ......因为“CALL test($email, $password)”正在使用字符串 concat 这对 SQL 注入不利.. 但我相信没有真正的方法来注入 CALL但最好是安全然后抱歉。对?. 使用数据库时总是总是总是总是总是总是总是总是总是使用准备好的语句(prepare()/execute())来防止SQL注入,也不例外。



查看完整回答
反对 回复 2021-11-05
  • 1 回答
  • 0 关注
  • 146 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信