Can';t通过php更新sql
这不起作用,我不知道如何排除故障。 代码如图所示Can';t通过php更新sql,php,mysql,sql,Php,Mysql,Sql,这不起作用,我不知道如何排除故障。 代码如图所示 Array([fName]=>Test[lName]=>Testing[age]=>25[weight]=>199[sex]=>male[heightFt]=>5[heightIn]=>7)无法更新数据:1 与 //die(“无法更新数据:”.print\r($\u POST)); die(“无法更新数据:.mysql_error()) 它表明 无法更新数据: 是否有php显示错误的地方。通常,当我的代码出现问题时,我只会看到一个白色屏幕,并且必
Array([fName]=>Test[lName]=>Testing[age]=>25[weight]=>199[sex]=>male[heightFt]=>5[heightIn]=>7)无法更新数据:1
与
//die(“无法更新数据:”.print\r($\u POST));
die(“无法更新数据:.mysql_error())代码>
它表明
无法更新数据:
是否有php显示错误的地方。通常,当我的代码出现问题时,我只会看到一个白色屏幕,并且必须通过尝试和错误来解决问题,加载资源失败:服务器响应状态为500(内部服务器错误)
您混合了mysqli和mysql接口调用。那不行
我们看到正在创建mysqli连接
$settings = parse_ini_file("settings.ini");
$conn = new mysqli($settings[servername],$settings[username],$settings[password], $settings[dbname]);
$height = $_POST['heightFt'] * 12 + $_POST['heightIn'];
if($conn->connect_error)
{
die("Connection failed: " . $conn->connect_error);
}
if(isset($_COOKIE['user']))
{
list($currentFName, $currentLName) = explode(",", $_COOKIE['user']);
}
$newFName = $_POST['fName'];
$newLName = $_POST['lName'];
$newAge = $_POST['age'];
$newWeight = $_POST['weight'];
$newHeight = $_POST['height'];
$newSex = $_POST['sex'];
$sql = "update $settings[userTable] set fName = $newFName, lName = $newLName, age = $newAge, weight = $newWeight, height = $newHeight, sex = $newSex where fName = $currentFName and lName = $currentLName";
$retval = mysql_query($sql, $conn);
if(!$retval)
{
die("Could not update data: " . print_r($_POST) );
//die("Could not update data: " . mysql_error());
}
echo "successful update";
但是我们看到了对mysql\uu
接口函数的调用
$conn = new mysqli(
不要那样做。那不行。使用mysqli函数
所以,首先解决这个问题
要调试SQL,请在将其提交到数据库之前回显
$SQL
。(确保要发送的字符串是要执行的SQL语句。)
此外,合并潜在的不安全值(例如来自$\u GET或$\u POST的变量值)会导致SQL注入漏洞。合并到SQL语句文本中的值必须正确转义。请参见mysqli\u real\u escape\u string
。但这还不足以保证代码不会仍然容易受到SQL注入的攻击
更好的模式是将准备好的语句与绑定占位符一起使用
这是不对的 如果
$newFName
是Fred,$newFName
是Flintstone
那么这个,
$retval = mysql_query(
或者您实际上可能需要这样做:
$sql = "update $settings[userTable] set fName = $newFName, lName = $newLName, ...";
评估为
$sql = "update " . $settings[userTable] . " set fName = $newFName, lName = $newLName, ...";
MySQL会对此犹豫不决,因为字符串文字应该用单引号括起来:
update mytable set fName = Fred, lName = Flintstone, ...
如果$newLName
是O'Reilly,MySQL将停止,他将看到字符串literal'O'
后跟MySQL不理解的内容
update mytable set fName = 'Fred', lName = 'Flintstone', ...
^ ^ ^ ^
为了使其正确运行,我们需要用另一个单引号转义值中的单引号,因此我们的SQL语句如下所示:
update mytable set fName = 'Fred', lName = 'O'Reilly', ...
^^^^^^
字符串文本中的两个单引号(由MySQL)解释为一个单引号。存储在列中的值(当然假设语句成功)将是我们想要的:O'Reilly
您可以对值进行转义,但更好的模式是使用绑定占位符准备语句
update mytable set fName = 'Fred', lName = 'O''Reilly', ...
^^
参考资料:您混合了mysqli和mysql接口调用。那不行 我们看到正在创建mysqli连接
$settings = parse_ini_file("settings.ini");
$conn = new mysqli($settings[servername],$settings[username],$settings[password], $settings[dbname]);
$height = $_POST['heightFt'] * 12 + $_POST['heightIn'];
if($conn->connect_error)
{
die("Connection failed: " . $conn->connect_error);
}
if(isset($_COOKIE['user']))
{
list($currentFName, $currentLName) = explode(",", $_COOKIE['user']);
}
$newFName = $_POST['fName'];
$newLName = $_POST['lName'];
$newAge = $_POST['age'];
$newWeight = $_POST['weight'];
$newHeight = $_POST['height'];
$newSex = $_POST['sex'];
$sql = "update $settings[userTable] set fName = $newFName, lName = $newLName, age = $newAge, weight = $newWeight, height = $newHeight, sex = $newSex where fName = $currentFName and lName = $currentLName";
$retval = mysql_query($sql, $conn);
if(!$retval)
{
die("Could not update data: " . print_r($_POST) );
//die("Could not update data: " . mysql_error());
}
echo "successful update";
但是我们看到了对mysql\uu
接口函数的调用
$conn = new mysqli(
不要那样做。那不行。使用mysqli函数
所以,首先解决这个问题
要调试SQL,请在将其提交到数据库之前回显
$SQL
。(确保要发送的字符串是要执行的SQL语句。)
此外,合并潜在的不安全值(例如来自$\u GET或$\u POST的变量值)会导致SQL注入漏洞。合并到SQL语句文本中的值必须正确转义。请参见mysqli\u real\u escape\u string
。但这还不足以保证代码不会仍然容易受到SQL注入的攻击
更好的模式是将准备好的语句与绑定占位符一起使用
这是不对的 如果
$newFName
是Fred,$newFName
是Flintstone
那么这个,
$retval = mysql_query(
或者您实际上可能需要这样做:
$sql = "update $settings[userTable] set fName = $newFName, lName = $newLName, ...";
评估为
$sql = "update " . $settings[userTable] . " set fName = $newFName, lName = $newLName, ...";
MySQL会对此犹豫不决,因为字符串文字应该用单引号括起来:
update mytable set fName = Fred, lName = Flintstone, ...
如果$newLName
是O'Reilly,MySQL将停止,他将看到字符串literal'O'
后跟MySQL不理解的内容
update mytable set fName = 'Fred', lName = 'Flintstone', ...
^ ^ ^ ^
为了使其正确运行,我们需要用另一个单引号转义值中的单引号,因此我们的SQL语句如下所示:
update mytable set fName = 'Fred', lName = 'O'Reilly', ...
^^^^^^
字符串文本中的两个单引号(由MySQL)解释为一个单引号。存储在列中的值(当然假设语句成功)将是我们想要的:O'Reilly
您可以对值进行转义,但更好的模式是使用绑定占位符准备语句
update mytable set fName = 'Fred', lName = 'O''Reilly', ...
^^
参考资料:您混合了mysqli和mysql接口调用。那不行 我们看到正在创建mysqli连接
$settings = parse_ini_file("settings.ini");
$conn = new mysqli($settings[servername],$settings[username],$settings[password], $settings[dbname]);
$height = $_POST['heightFt'] * 12 + $_POST['heightIn'];
if($conn->connect_error)
{
die("Connection failed: " . $conn->connect_error);
}
if(isset($_COOKIE['user']))
{
list($currentFName, $currentLName) = explode(",", $_COOKIE['user']);
}
$newFName = $_POST['fName'];
$newLName = $_POST['lName'];
$newAge = $_POST['age'];
$newWeight = $_POST['weight'];
$newHeight = $_POST['height'];
$newSex = $_POST['sex'];
$sql = "update $settings[userTable] set fName = $newFName, lName = $newLName, age = $newAge, weight = $newWeight, height = $newHeight, sex = $newSex where fName = $currentFName and lName = $currentLName";
$retval = mysql_query($sql, $conn);
if(!$retval)
{
die("Could not update data: " . print_r($_POST) );
//die("Could not update data: " . mysql_error());
}
echo "successful update";
但是我们看到了对mysql\uu
接口函数的调用
$conn = new mysqli(
不要那样做。那不行。使用mysqli函数
所以,首先解决这个问题
要调试SQL,请在将其提交到数据库之前回显
$SQL
。(确保要发送的字符串是要执行的SQL语句。)
此外,合并潜在的不安全值(例如来自$\u GET或$\u POST的变量值)会导致SQL注入漏洞。合并到SQL语句文本中的值必须正确转义。请参见mysqli\u real\u escape\u string
。但这还不足以保证代码不会仍然容易受到SQL注入的攻击
更好的模式是将准备好的语句与绑定占位符一起使用
这是不对的 如果
$newFName
是Fred,$newFName
是Flintstone
那么这个,
$retval = mysql_query(
或者您实际上可能需要这样做:
$sql = "update $settings[userTable] set fName = $newFName, lName = $newLName, ...";
评估为
$sql = "update " . $settings[userTable] . " set fName = $newFName, lName = $newLName, ...";
MySQL将对此犹豫不决,因为字符串文本应该包含在s中