在php数据库查询中插入变量
这很简单,但我似乎找不到我想要的答案 这非常有效:在php数据库查询中插入变量,php,mysql,Php,Mysql,这很简单,但我似乎找不到我想要的答案 这非常有效: mysql_query("INSERT INTO Courses (CourseName) values ('MyValue')"); 但这不起作用: mysql_query("INSERT INTO Courses (CourseName) values ('" + $_POST['course'] + "')"); 我测试过,我知道$\u POST['course']包含MyValue 我甚至可以在php中使用这种语法吗? Sql注入在
mysql_query("INSERT INTO Courses (CourseName) values ('MyValue')");
但这不起作用:
mysql_query("INSERT INTO Courses (CourseName) values ('" + $_POST['course'] + "')");
我测试过,我知道$\u POST['course']
包含MyValue
我甚至可以在php中使用这种语法吗?
Sql注入在我的例子中并不重要。使用
而不是+
mysql_query("INSERT INTO Courses (CourseName) values ('" . mysql_real_escape_string($_POST['course']) . "')");
PHP使用。串接字符串
mysql_query("INSERT INTO Courses (CourseName) values ('".mysql_real_escape_string($_POST['course'])."')");
还可以使用mysql\u real\u escape\u字符串来防止任何错误,例如o'neil在其中有一个引号。1)使用mysqli,而不是mysql,因为它已被弃用
2) 如果您仍然使用mysql,请始终使用mysql\u real\u转义字符串转义来自您站点的变量
3) 调试代码。在您的示例中,最快的方法就是使用:
mysql_query("... your sql string ") or die(mysql_error())
比你看到的错误。(但是当你的脚本上线时,注释掉所有”或者死亡(mysql_error())+代码,这样其他人就看不到错误,然后入侵你的网站(非常简单))
4) .是php中字符串的串联,而不是+
mysql_query("INSERT INTO Courses (CourseName) values ('" + $_POST['course'] + "')");
PHP不支持您正在使用的字符串连接方法。其他语言也支持该方法。有多个选项可用于构建字符串
选项1:将+
替换为
mysql_query("INSERT INTO Courses (CourseName) values ('".$_POST['course']."')");
选项2:不间断
mysql_query("INSERT INTO Courses (CourseName) values ('{$_POST['course']}')");
在使用不同语言时,您应该仔细阅读基础知识,尤其是在本例中,搜索“PHP字符串连接”将为您提供所需的内容
另外:不要使用MySQL,因为它在PHP5.5中就已经被弃用了。使用MySQLi或PDOuse.“'not'+'其PHP not javascriptMysql'.*已被弃用。这很容易导致SQL注入…
MySQL_查询(“INSERT-INTO-Courses(CourseName)值('$'u POST['course'].'));
如果您只是在学习PHP和MySQL数据库,请使用准备好的语句学习MySQLi或PDO库,而不是不推荐的MySQL库-从start@Wiggler易受SQL注入攻击这易受SQL注入@Pekka攻击웃 你是对的,但我想澄清的是,在我的案例中,使用
而不是+
SQL注入根本不是一个问题。我知道这一点,它与问题毫无关系。@Pha显示易受攻击的代码仍然不是一个好的做法。人们从中学习答案(我在中编辑了它)你是对的,我纠正了第2点。我写了这篇文章,因为我注意到只有少数php程序员想替换mysql,mysqli…并且不到一半的人想使用面向对象的代码..或者知道oop…但我知道mysqli可以用作函数库..但你是对的。