gpt4 book ai didi

php - 我可以使用 isset() 来控制 mysql 查询的执行吗

转载 作者:行者123 更新时间:2023-11-28 23:32:55 25 4
gpt4 key购买 nike

我创建了一个可编辑的数据库来帮助我自动进行每周成员(member)更新。每个成员每周更新 9 个值,这些值由 $_POST 控制提交到辅助 php。

从那个 php 开始,post 值被设置为 php var,然后用于更新 sql db。

mysql_select_db("web_footy1") or die(mysql_error());




// The SQL statement is built
$strSQL = "UPDATE Round_6 SET ";

$strSQL = $strSQL . "Game1= '$Game1', ";

$strSQL = $strSQL . "Game2= '$Game2', ";

$strSQL = $strSQL . "Game3= '$Game3', ";

$strSQL = $strSQL . "Game4= '$Game4', ";

$strSQL = $strSQL . "Game5= '$Game5', ";

$strSQL = $strSQL . "Game6= '$Game6', ";

$strSQL = $strSQL . "Game7= '$Game7', ";

$strSQL = $strSQL . "Game8= '$Game8', ";

$strSQL = $strSQL . "Game9= '$Game9' ";

$strSQL = $strSQL . "WHERE Member = '$Member' ";

// The SQL statement is executed
mysql_query($strSQL) or die(mysql_error()) ;

是的,我知道这会受到 SQL 注入(inject)的影响,这是一个私有(private)站点,因此安全性可以等待 atm

问题是所有的值都是同时更新的,要更新一个,你需要重新输入所有值,否则它们将被替换为空值。

所以我的问题是双重的。 A)能够分别控制每个变量的最干净的方法是什么,B) 我可以吗?如果可以,如何使用 isset($GameX) 来控制执行哪些查询。

例如

IF (isset($Game1)) {UPDATE Round6 SET Game1='$Game1' WHERE Member='$Member'} ;

请记住,3 周前我对编码一无所知,并且在那段时间参加了 html、php 和 sql 的速成类(class)...干杯

最佳答案

真的真的真的无法推荐您修复您的 SQL 注入(inject)。

话虽如此,您可以通过编程方式向 UPDATE 子句添加条件。一个示例可能是以下代码段:

<?php

$Game3 = "things";
$Game5 = "stuff";
$Game6 = "awesome";
$Member = 'ben';

$update_parts = array();
for ($game_counter = 1; $game_counter < 10; $game_counter++) {
$variable_name = "Game" . $game_counter;
if ( isset($$variable_name) ) { // This is like isset($Game1)
$update_parts[] = "Game" . $game_counter . " = '" . $$variable_name . "'";
}
}

if ( sizeof($update_parts) > 0 ) {
$strSQL = "UPDATE Round_6 SET ";
$strSQL .= implode(", ", $update_parts);
$strSQL .= " WHERE Member = '$Member'";
echo $strSQL;
}

我在上面放了几个变量。这会产生以下 SQL:

UPDATE Round_6 SET Game3 = 'things', 
Game5 = 'stuff', Game6 = 'awesome' WHERE Member = 'ben'

编辑:如果您想使用 PDO,您需要将查询和参数分开。在下面的示例中,我将查询参数放在

$conn = new PDO("mysql:host=localhost;dbname=database;","username","password"); // Your Connection String

$update_parts = array();
$query_params = array();
for ($game_counter = 1; $game_counter < 10; $game_counter++) {
$variable_name = "Game" . $game_counter;
if ( isset($$variable_name) ) { // This is like isset($Game1)
$update_parts[] = "Game" . $game_counter . " = ?";
$query_params[] = $$variable_name;
}
}

if ( sizeof($update_parts) > 0 ) {
$strSQL = "UPDATE Round_6 SET ";
$strSQL .= implode(", ", $update_parts);
$strSQL .= " WHERE Member = ?";
$query_params[] = $Member;

// Here is where you'd run the update
$stmt = $conn->prepare($strSQL);
$stmt->execute($query_params); // Notice I'm passing in the parameters separately
}

关于php - 我可以使用 isset() 来控制 mysql 查询的执行吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36880021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com