Php 将数据从一个表检索到具有不同列的另一个表
试图从数据库中检索信息并将其输入到一个整体中。我已经读了很多,但找不到任何具体的问题Php 将数据从一个表检索到具有不同列的另一个表,php,mysql,sql,pdo,Php,Mysql,Sql,Pdo,试图从数据库中检索信息并将其输入到一个整体中。我已经读了很多,但找不到任何具体的问题 代码在我放置注释的地方停止,在这里停止回答您提出的问题 冒号(:)在SQL文本中用于标识准备语句中命名绑定参数的占位符。该冒号包含在SQL文本中,并在执行SQL语句时提供该占位符的值 “货币符号”标识一个PHP变量;在字符串上下文中,对变量求值,并将变量的值合并到SQL文本中 以下是对你所问问题的回答。但我认为这将回答你应该问的其他几个问题 如果我们不能保证变量的值不包含一些将被解释为SQL的字符,那么PHP
:
)在SQL文本中用于标识准备语句中命名绑定参数的占位符。该冒号包含在SQL文本中,并在执行SQL语句时提供该占位符的值
“货币符号”标识一个PHP变量;在字符串上下文中,对变量求值,并将变量的值合并到SQL文本中
以下是对你所问问题的回答。但我认为这将回答你应该问的其他几个问题 如果我们不能保证变量的值不包含一些将被解释为SQL的字符,那么PHP变量中包含的“不安全”值就是“SQL注入”漏洞的来源。这就是为什么mysql接口包含了
mysql\u real\u escape\u string
函数。这是一个“包装器”,它检查值,并正确地转义值,以便将它们视为值,而不是解释为SQL语法
Q:1。代码停止在我放置注释的地方//>>>>停止在这里,这样就不会执行
mysql\u查询($sql\u conf2)
?你怎么知道的?您可以发布php错误消息或mysql_error()的结果吗?此外,mysql_*已被弃用,请使用mysqli_*;您的查询对于sql注入来说是显而易见的抱歉,使用PDO语法和准备好的语句更新了代码。此外,没有错误消息。1。我知道,因为我添加了一个echo
语句,发现它就停在那里了。我在下面添加了一个$result\u conf2=$sql\u conf2->execute()或die('Error update database:'.mysql\u Error())代码>,但不显示。2.对不起,我无法想象你在说什么。你能进一步扩展吗?好啊谢谢3.好的。不需要单独处理每一行,先运行SELECT,然后为每一行运行单独的INSERT。通过运行一个INSERT。。。SELECT
语句,SELECT返回的所有行都将被插入(如果它成功运行的话)。我现在看到(我错过了对您问题的编辑),您现在正在混合使用PDO和mysql函数。你不能那样做。用一个或另一个。(不确定为什么最初是使用mysql接口开发的,但所有这些都必须更改为使用PDO,包括获取连接。)这看起来像是一个非常熟悉的产品“我将使用mysql接口编写它,不必担心SQL注入,然后将其更改为PDO,稍后再处理SQL注入“好的。这是我的问题之一。我不知道该怎么做。。。是的,我同意。我希望我能一扫就完成,但我有点不知所措。从mysql接口转换到PDO接口是一件非常痛苦的事情,因为你不能在这里更改一些东西,在那里更改一些东西。这一切都必须改变,这就是为什么在关于mysql接口的新手问题上总是有那么多“用PDO而不是mysql来做”的评论。从PDO开始开发要比转换使用mysql接口开发的项目少得多。
<?php
include('db.php');
// passkey that got from link
$pk=$_GET['pk'];
$t_awhole_conf="t_awhole";
// Retrieve data from table where row that match this passkey
$sql_conf1="SELECT * FROM $t_awhole_conf WHERE confirm_code ='$pk'";
$result_conf=mysql_query($sql_conf1) or die ('Error updating database: '.mysql_error());
// If successfully queried
if($result_conf){
// Count how many row has this passkey
$count=mysql_num_rows($result_conf);
// if found this passkey in our database, retrieve data from table "t_awhole"
if($count==1){
$rows=mysql_fetch_array($result_conf);
$fN = $rows['fN']; // capitalizes the first letter (6-26-14)
$lN = $rows['lN']; // capitalizes the first letter (6-26-14)
$aI = $rows['aI'];
$eml = $rows['eml'];
$pss = $rows['pss'];
$pss2 = $rows['pss2'];
$a_whole_conf="a_whole";
// Insert data that retrieves from "t_awhole" into table "a_whole"
$sql_conf2= $conn->prepare("INSERT INTO $a_whole_conf(fN, lN, aI, eml, pss, admin)
VALUES ($fN, $lN, $aI, $eml, $pss, $admin)");
//>>>>Stops here<<<<<
$result_conf2=$sql_conf2->execute() or die ('Error updating database: '.mysql_error());
}
// if not found passkey, display message "Wrong Confirmation code"
else {
echo "Wrong Confirmation code";
}
// if successfully moved data from table"t_awhole" to table "a_whole" displays message "Your account has been activated" and don't forget to delete confirmation code from table "t_awhole"
if($result_conf2){
echo "Your account has been activated";
// Delete information of this user from table "t_awholeb" that has this passkey
$sql_conf3="DELETE FROM $t_awhole_conf WHERE confirm_code = '$pk'";
$result_conf3=mysql_query($sql_conf3);
}
}
?>
$sql = "INSERT INTO a_whole
( fN , lN, aI, eml, pss, admin)
SELECT t.fN, t.lN, t.aI, t.eml, t.pss, '' AS admin
FROM t_awhole t
WHERE t.confirm_code = '" . mysql_real_escape_string($pk) "'";
$sql = "INSERT INTO a_whole
( fN , lN, aI, eml, pss, admin)
SELECT t.fN, t.lN, t.aI, t.eml, t.pss, '' AS admin
FROM t_awhole t
WHERE t.confirm_code = :pk";
$sth = $dbh->prepare($sql);
$sth->bindParam(':pk', $pk, PDO::PARAM_INT);
$sth->execute();