我对mysql db非常糟糕,我需要帮助。
我需要从表输入数据UPDATE表旧值+输入中的新数据。
这是我需要更改的PHP代码
<?php
$data = json_decode(file_get_contents("php://input"));
$zm = mysql_real_escape_string($data->zlatni_medvjed);
$ck = mysql_real_escape_string($data->crna_kraljica);
$gv = mysql_real_escape_string($data->gricka_vjestica);
$dk = mysql_real_escape_string($data->dva_klasa);
mysql_connect("localhost","root","");
mysql_select_db("medvedgrad");
mysql_query(" INSERT INTO stanje_piva(`zlatni_medvjed`, `crna_kraljica`, `gricka_vjestica`,`dva_klasa`)
VALUES('{$zm}','{$ck}','{$gv}','{$dk}') ");
?>
答案 0 :(得分:1)
你真的应该使用MySQLi或PDO代替准备好的代码来保护你的代码。话虽如此,您的问题是在打开连接之前使用mysql_real_escape_string()
。
来自mysql_real_escape_string()
在没有MySQL连接的情况下执行此函数也会发出E_WARNING级别的PHP错误。仅在存在有效MySQL连接的情况下执行此功能。
这意味着您应该将连接置于文件的顶部,并将其设为
mysql_connect("localhost","root","");
mysql_select_db("medvedgrad");
$data = json_decode(file_get_contents("php://input"));
$zm = mysql_real_escape_string($data->zlatni_medvjed);
$ck = mysql_real_escape_string($data->crna_kraljica);
$gv = mysql_real_escape_string($data->gricka_vjestica);
$dk = mysql_real_escape_string($data->dva_klasa);
mysql_query(...);
处理错误
您还没有进行任何错误处理或检查。我建议您在开始标记error_reporting(E_ALL);
后直接添加ini_set('display_errors', 1);
<?php
,这样就会告诉您有关所有警告和错误的信息。此外,mysql_error()
将PDO与预准备语句一起使用,以防止SQL注入并使用适当的现代API。自PHP 5.5以来已弃用mysql_*
函数(并且在PHP 7中完全删除),如果可以的话,您应该stop using them。
error_reporting(E_ALL);
ini_set('display_errors', 1);
$mysql_host = "localhost";
$mysql_username = "root";
$mysql_password = "";
$mysql_database = "medvedgrad";
// First we create the connection
$pdo = new PDO("mysql:host=".$mysql_host .";dbname=".$mysql_database .";charset=utf8", $mysql_username, $mysql_password);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$data = json_decode(file_get_contents("php://input"));
$zm = $data->zlatni_medvjed;
$ck = $data->crna_kraljica;
$gv = $data->gricka_vjestica;
$dk = $data->dva_klasa;
// Then we prepare, and execute the query
$stmt = $pdo->prepare("INSERT INTO stanje_piva (`zlatni_medvjed`, `crna_kraljica`, `gricka_vjestica`, `dva_klasa`) VALUES (:zm, :ck, :gv, :dk)");
$stmt->execute(array("zm" => $zm, "ck" => $ck, "gv" => $gv, "dk" => $dk));
这只是一个快速示例,您可以采取其他措施来改进它,但这会阻止SQL注入并使用适当的API。请注意,API不会混用,因此如果您有其他mysql_
代码,则需要将其切换出来。
答案 1 :(得分:0)
在表stanje_piva
上创建一个唯一键,然后使用以下命令
INSERT INTO <table_name>(<attributes of the table>) VALUES (<values you want to insert>) ON DUPLICATE KEY UPDATE <column_to_update> = <column_to_update> + <increment/decrement value>;
。
例如,
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
与
相同UPDATE table SET c=c+1 WHERE a=1;
了解详情read here