尝试通过在URL中键入值来插入数据库,但是难以插入到数据库中:
以下是网址:
http://student.cs.hioa.no/~s180343/updatedb.php?verdi=22
以下是代码:
<?php
$dbhost = "MYSQL-SERVER";
$dbuser = "USERNAME";
$dbpass = "";
$verdi = $_GET['verdi'];
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
$sql = "INSERT INTO test ('id') VALUES (`$verdi`)";
mysql_select_db('s180350');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Could not enter data: ' . mysql_error());
}
echo "Entered data successfully\n";
mysql_close($conn);
?>
答案 0 :(得分:4)
在字符串值周围使用引号。在列名称周围使用滴答。你倒退了:
$sql = "INSERT INTO test ('id') VALUES (`$verdi`)";
shjould
$sql = "INSERT INTO test (`id`) VALUES ('$verdi')";
仅供参考,您对SQL injections
持开放态度答案 1 :(得分:1)
你正在反向,即为列名添加''
,为值
$sql = "INSERT INTO test ('id') VALUES (`$verdi`)";
应该是
$sql = "INSERT INTO test (`id`) VALUES ('$verdi')";
在定义conn之后开始使用prepare语句或至少在下面。
$verdi = mysql_real_escape_string($verdi);
答案 2 :(得分:0)
请不要忘记保护所有用户输入你的sql查询。见SQL injection wiki
代码的问题是错误地使用引号。见编辑代码:
$conn = mysql_connect("MYSQL-SERVER", "USERNAME", $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db('s180350');
$retval = mysql_query( "INSERT INTO test ('id') VALUES ('".mysql_real_escape_string($_GET['verdi'])"')", $conn );
if(! $retval )
{
die('Could not enter data: ' . mysql_error());
}
echo "Entered data successfully\n";
PS:不要通过设置你不需要的变量来耗尽资源。