为什么我的插入在php中不起作用?
我有一个insert语句,我正在向DB查询为什么我的插入在php中不起作用?,php,database,insert,mysqli,Php,Database,Insert,Mysqli,我有一个insert语句,我正在向DB查询 $notes_sql = 'INSERT into notes SET order_id = "'.$_GET['order_id'].'", date_added = "'.$date_added.'", note_message = "'.$_SESSION['note_message'].'"'; $notes_result = $conn->query(
$notes_sql = 'INSERT into notes SET
order_id = "'.$_GET['order_id'].'",
date_added = "'.$date_added.'",
note_message = "'.$_SESSION['note_message'].'"';
$notes_result = $conn->query($notes_sql) or die(mysqli_error($conn));
我知道sql语句是正确的,因为当我尝试回显它并在phpMyadmin中运行该回显语句时,它会很好地插入它
尝试运行insert语句时,出现以下错误:
针对表“notes”的用户“ideapale\u amquery”@“localhost”的INSERT命令被拒绝
第74行是查询语句的代码行
我还知道我通过included connection.php文件正确地连接到了DB,因为我使用的是我正在处理的页面上包含的文件中的变量
我猜我没有正确连接到DB,但我不确定它是什么。我从另一个工作正常的页面复制了这个页面的代码,所以我不明白为什么它不工作
为什么我的插入在php中不起作用
*****更新*****
这是我的连接脚本:
function dbConnect($type) {
if($type == 'query'){
$user = 'ideapale_amquery';
$pwd = 'xxxxxxxxxxx';
} else if($type == 'admin') {
$user = 'ideapale_amadmin';
$pwd = 'xxxxxxxxxxxx';
} else {
exit('Unrecognized connection type');
}
$conn = new mysqli('localhost', $user, $pwd, 'ideapale_offorders') or die('Cannot open database');
return $conn;
}
以下是我如何从我所在的页面连接到连接脚本:
$conn = dbConnect('admin');
我正在使用管理员权限连接数据库,所以我不明白它为什么认为我要使用“amquery”用户名 试试看
$notes_result = $conn->query($notes_sql) or die(mysqli_error($conn));
获取更新的错误
如果回送的SQL工作正常,您必须猜测这是连接或权限问题。你在其他地方插入吗
编辑:因此这是一个权限问题,请运行以下命令:
GRANT INSERT PRIVILEGES ON *.* TO 'ideapale_amquery'@'localhost'
但是,如果您认为不需要,请先尝试以下方法:
SHOW GRANTS FOR 'ideapale_amquery'@'localhost'
您应该检查并查看返回的错误是什么 更改:
die(mysqli\u error())
到:
die(mysqli\u error($conn))
您声称正在连接ideapale\u amadmin
用户,但表“notes”的用户“ideapale\u amquery”@“localhost”被拒绝的错误消息INSERT命令清楚地表明您不是。您使用了错误的MySQLi对象(即您在脚本前面创建的连接),或者您将错误的参数传递给了dbConnect()
这是我收到的更新错误:INSERT命令被拒绝给用户'ideapale_amquery'@'localhost'用于表'notes'哈哈,时间或其他什么-我只是更新了我的答案来猜测。简单地说,你需要向该用户授予INSERT权限。看到我更新的答案(等一下)。所以我想我只对我选择的用户有查询权限,但我选择了对整个数据库拥有所有权限的管理员用户。我解决了问题。我正在对包含的文件添加另一个dbConnect函数调用。对不起,浪费了你的时间。谢谢你的帮助!顺便说一句,永远不要这样做:order\u id=“”。$\u GET['order\u id']”。
。这就是SQL注入攻击。总是,总是清理用户输入,通常使用mysql\u real\u escape\u string
。问题是由于各种原因,“以后”通常不会发生。从一开始就做对。:)安全是你首先需要担心的事情。不要掉以轻心,不要拖延。否则,你会后悔的。如果你使用OOP,那么就使用它=>$conn->error@zeckdude,->error是mysqli对象的属性。在您的情况下,只需输入die:die($conn->error);