获取url参数并插入数据库

时间:2014-04-03 13:13:10

标签: php mysql sql

尝试通过在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);
?>

3 个答案:

答案 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:不要通过设置你不需要的变量来耗尽资源。