【问题标题】:PHP insert error 1064PHP插入错误1064
【发布时间】:2013-12-10 17:13:12
【问题描述】:

我的 php 页面上不断出现错误。当我提交表单时,它说我没有权限查看 php 页面,当我将它放入 sql 查询测试时,它说它是错误 #1064。我不断收到此错误消息,我不知道为什么。在查询测试中,我只将信息放在 .有人可以帮忙解决这个问题吗?

<html>
<head>
<meta charset="utf-8">
<title>Enquiry</title>
</head>

<body> 
<?php

$name=$_POST['name'];
$email=$_POST['email'];
$phone = $_POST['phone'];
$radio = $_POST['radio'];
$enquiry = $_POST['enquiry'];

$user="root";
$password="";
$database="test";

mysql_connect('localhost',$user,$password) or die("Unable to connect to server"); 
mysql_select_db($database) or die("Unable to select database"); 
$query = "INSERT INTO Enquiry VALUES ('','$name','$email','$phone','$radio','$enquiry')";
mysql_query($query); 
mysql_close(); 

?>
</body>
</html>

【问题讨论】:

  • 你能发布完整的错误信息吗?它会告诉你到底发生了什么。顺便问一下,如果您收到奥康纳先生的询问,您知道会发生什么吗?
  • 旁注:请考虑升级到 mysqli,因为不再支持 mysql,并查看 SQL 注入
  • 仅供参考,您也对SQL injections保持开放态度
  • SQL 查询:$name = $_POST['name']; MySQL 说:文档 #1064 - 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '$name=$_POST['name']' 附近使用正确的语法 这是来自查询测试的错误消息。而且现在安全性不是什么大问题,我只需要数据库来为一个 uni 项目工作。
  • 请,在您编写任何更多的 SQL 接口代码之前,您必须阅读 proper SQL escaping 以避免严重的 SQL injection bugs。此外,mysql_query 不应在新应用程序中使用。这是一个已弃用的接口,已从 PHP 的未来版本中删除。像PDO is not hard to learn 这样的现代替代品。 PHP The Right Way 之类的指南将帮助您避免犯此类错误。

标签: php mysql mysql-error-1064 database-table


【解决方案1】:
<?php
$con= mysql_connect("localhost","root","") or die('Unable to connect to server:'mysql_error());
mysql_select_db("test",$con);
if(isset($_POST['submit']))  
{

$name=test_input($_POST['name']);
$email=test_input($_POST['email']);
$phone = test_input($_POST['phone']);
$radio = test_input($_POST['radio']);
$enquiry = test_input($_POST['enquiry']);
$sql = "
"INSERT INTO `Enquiry`"." (
    name,
    email,
    phone,
    radio,
    enquiry
)". "VALUES". "(
    "$name",
    "$email",
    "$phone",
    "$radio",
    "$enquiry"
)
";
 $res=mysql_query($sql);

if(!$res){
die('Could not enter data: ' . mysql_error());
}
echo 'your successfull msg goes here';

function test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = mysql_real_escape_string($data);
return $data;
}


?>

假设primaryid 是如上所述的自动递增。试试这段代码

【讨论】:

  • 如果你喜欢SQL injection bugs,这就是这样做的方式。
  • ehee 试图插入 db 却遇到错误的人,我认为不是正确的客户来推动他进行 sql 注入,而他也没有要求 .. 麻烦吗??
  • 无知不是不正确逃避的借口,这是一种鲁莽的开发实践,伤害了每个人。与其他语言相比,PHP 是迄今为止最严重的违规者。如果您知道如何正确地做,以帮助为他人树立榜样。
  • 写SQL代码是很严重。你弄错了,你可能会毁掉某人的公司或你自己的事业。不要认为这是一个笑话。您认为 Sony 的开发人员 after their massive data breach 是因为这样的简单问题而感到高兴吗?如果你现在对此采取随意的态度,当你的代码投入生产时,你会以最大可能的方式搞砸这样的问题。
  • 虽然这可能“只是一个单一的项目”(可能是一个家庭作业),但正如其他人所说,不考虑安全性的项目永远不会太随意。至少,添加诸如“在真实(生产)系统中,我会在这里做某事以防止 SQL 注入攻击等”之类的 cmets。即使您实际上并未进行编码。它会让你的导师/评分者印象深刻,你至少在考虑这些现实世界的问题。如果您花几分钟时间进行实际编码,他们会更加印象深刻。
【解决方案2】:

假设您在数据库中的第一列是自动递增的主键,您需要将 SQL 更改为:

$sql = "
    INSERT INTO Enquiry (
        name,
        email,
        phone,
        radio,
        enquiry
    ) VALUES (
        '$name',
        '$email',
        '$phone',
        '$radio',
        '$enquiry'
    )
    ";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多