Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 插入重复更新时_Php_Mysql - Fatal编程技术网

Php 插入重复更新时

Php 插入重复更新时,php,mysql,Php,Mysql,我要做的是创建一个高分页面,每次更新时,我都希望它进入同一个条目,因此如果用户名重复,我希望它使用当前信息更新,然后使用发布的信息更新,在互联网上看了一些东西后,我尝试了下面的代码,这给了我错误的列计数与第1行的值计数不匹配。谁能告诉我我做错了什么,因为我对PHP+MySql非常陌生 mysql_query("INSERT INTO $table(Username, Time, Videos, Credits) VALUES ('$user', '$time', '$videos', '$cre

我要做的是创建一个高分页面,每次更新时,我都希望它进入同一个条目,因此如果用户名重复,我希望它使用当前信息更新,然后使用发布的信息更新,在互联网上看了一些东西后,我尝试了下面的代码,这给了我错误的列计数与第1行的值计数不匹配。谁能告诉我我做错了什么,因为我对PHP+MySql非常陌生

mysql_query("INSERT INTO $table(Username, Time, Videos, Credits) VALUES ('$user', '$time', '$videos', '$credits',
    'ON DUPLICATE KEY UPDATE', Time='Time+$time', Videos='Videos+$videos', Credits='Credits+$credits')", $conn);

语法不正确,您正在将“重复更新时”及其规则作为值传递给insert。正确的查询应该是

mysql_query("
    INSERT INTO
        $table(Username, Time, Videos, Credits)
    VALUES
        ('$user', '$time', '$videos', '$credits')
    ON DUPLICATE KEY UPDATE
        Time=Time+'$time',
        Videos=Videos+'$videos',
        Credits=Credits+'$credits'
    ",
    $conn
);

语法不正确,您正在将“重复更新时”及其规则作为值传递给insert。正确的查询应该是

mysql_query("
    INSERT INTO
        $table(Username, Time, Videos, Credits)
    VALUES
        ('$user', '$time', '$videos', '$credits')
    ON DUPLICATE KEY UPDATE
        Time=Time+'$time',
        Videos=Videos+'$videos',
        Credits=Credits+'$credits'
    ",
    $conn
);

这段代码是SQL注入的噩梦

确保对照白名单检查动态表名称,如下所示:

$user = mysql_real_escape_string($_GET['user']);
$time = mysql_real_escape_string($_GET['time']);
$videos = mysql_real_escape_string($_GET['videos']);
$credits = mysql_real_escape_string($_GET['credits']);

$allowed_tables = array('table1', 'table2');  
$table = $_POST['table'];
$query = "";  //do nothing

if (in_array($table, $allowed_tables)) {   //<<-- check against whitelist.
  $query = "
    INSERT INTO
        $table(Username, Time, Videos, Credits)
    VALUES
        ('$user', '$time', '$videos', '$credits')
    ON DUPLICATE KEY UPDATE
        Time=Time+'$time',
        Videos=Videos+'$videos',
        Credits=Credits+'$credits'
    "
}    
mysql_query($query, $con);
$user=mysql\u real\u escape\u字符串($\u GET['user']);
$time=mysql\u real\u escape\u字符串($\u GET['time']);
$videos=mysql\u real\u escape\u字符串($\u GET['videos']);
$credits=mysql\u real\u escape\u字符串($\u GET['credits']);
$allowed_tables=数组('table1','table2');
$table=$_POST['table'];
$query=“”//无所事事

如果(在数组($table,$allowed_tables)){/中,这段代码是SQL注入的噩梦

确保对照白名单检查动态表名称,如下所示:

$user = mysql_real_escape_string($_GET['user']);
$time = mysql_real_escape_string($_GET['time']);
$videos = mysql_real_escape_string($_GET['videos']);
$credits = mysql_real_escape_string($_GET['credits']);

$allowed_tables = array('table1', 'table2');  
$table = $_POST['table'];
$query = "";  //do nothing

if (in_array($table, $allowed_tables)) {   //<<-- check against whitelist.
  $query = "
    INSERT INTO
        $table(Username, Time, Videos, Credits)
    VALUES
        ('$user', '$time', '$videos', '$credits')
    ON DUPLICATE KEY UPDATE
        Time=Time+'$time',
        Videos=Videos+'$videos',
        Credits=Credits+'$credits'
    "
}    
mysql_query($query, $con);
$user=mysql\u real\u escape\u字符串($\u GET['user']);
$time=mysql\u real\u escape\u字符串($\u GET['time']);
$videos=mysql\u real\u escape\u字符串($\u GET['videos']);
$credits=mysql\u real\u escape\u字符串($\u GET['credits']);
$allowed_tables=数组('table1','table2');
$table=$_POST['table'];
$query=”“;//什么也不做

if(在数组中($table,$allowed\u tables)){//警告,您的代码容易受到sql注入的影响。我在脚本中对此有一些保护措施,我自己也尝试过,并对其进行了修补。@Daniel不一定,在他将变量放入查询之前,我们不知道他对变量做了什么,他可能正在调用
mysql\u real\u escape\u string
@Daniel您可能更好停止为用户创建另一个表,您可以做一个简单的查找,以便查看该用户名是否存在,如果不创建它,并将用户Id放入高分表。@JLevet-每当我看到直接字符串替换或连接时,我都会发出警告。Daniel,
mysql\u real\u escape\u string
或任何其他相关方案都不会当使用动态表名时,它不会保护您!警告,您的代码容易受到sql注入的影响。我在脚本中对此有一些保护措施,我自己也尝试过,并对其进行了修补。@Daniel不一定,在他将变量放入查询之前,我们不知道他对变量做了什么,他可能正在调用
mysql\u real\u escape\string
@Daniel您最好为用户创建另一个表,您可以做一个简单的查找,查看该用户名是否存在,如果不创建它,并将用户Id放入高分表中。@JLevet-每当我看到直接字符串替换或连接时,我都会发出警告。Daniel,
mysql\u real\u escape\u string
或任何其他方案在使用动态表名时不会保护您!修复了ya的SQL注入(动态表名除外)。修复了ya的SQL注入(动态表名除外)。