Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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,我正在开发一个数据库应用程序。我在用php处理一个表时遇到了麻烦,因为它使用两列作为主键。我已经建立了索引页面和插入页面,它们工作正常,但删除、编辑和详细信息页面出现了问题。 下面是详细信息页面的html 章节详情 第号法令: 章节编号: 下面是php代码 <?php require '../../AppData/database.php'; $id = null; if ( !empty($_GET['ActNo'])) { $id = $_REQUEST['

我正在开发一个数据库应用程序。我在用php处理一个表时遇到了麻烦,因为它使用两列作为主键。我已经建立了索引页面和插入页面,它们工作正常,但删除、编辑和详细信息页面出现了问题。 下面是详细信息页面的html


章节详情
第号法令:
章节编号:

下面是php代码

   <?php

require '../../AppData/database.php';
$id = null; 
if ( !empty($_GET['ActNo'])) {
    $id = $_REQUEST['ActNo'];
}
$sec = null;
if ( !empty($_GET['SectionNo'])) {
    $id = $_REQUEST['SectionNo'];
}

if ( null==$id && null==$sec ) {
    header("Location: index.php");
} else {
    $pdo = Database::connect();
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "SELECT * FROM section where ActNo = ? AND SectionNo= ?";
    $q = $pdo->prepare($sql);
    $q->execute(array($id, $sec));
    $data = $q->fetch(PDO::FETCH_ASSOC);
    Database::disconnect();
}
   ?>

当我单击索引页上的详细信息链接时。数据通过url发送。我可以看到这两个值都在url中正确发送,但在下一页上没有接收到它们


我对POST、GET和REQUEST没有太多经验,我认为这就是问题所在。请看一看,告诉我出了什么问题以及如何解决

好的,我找到问题了。这是修改后的代码

 <?php

require '../../AppData/database.php';
$id=null ; 
if ( !empty($_GET['ActNo'])) {
    $id = $_REQUEST['ActNo'];
}
$sec=null ;
if (  !empty($_GET['SectionNo'])) {
    $sec = $_REQUEST['SectionNo'];
}

if ( null==$id || null==$sec ) {
    header("Location: index.php");
} else {
    $pdo = Database::connect();
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "SELECT * FROM section where ActNo = ? AND SectionNo= ?";
    $q = $pdo->prepare($sql);
    $q->execute(array($id, $sec));
    $data = $q->fetch(PDO::FETCH_ASSOC);
    Database::disconnect();
}
  ?> 

警告:
如果(空==$id | |空==$sec)
。因为我认为如果其中一个丢失了,你应该重新定向。也可以在last else块中回显$id和$sec变量吗?我不明白为什么要在last else块中回显它。这段代码以前使用单列键对我有效。但是现在它不起作用了。为你的新问题创建一个新问题。
 <?php

require '../../AppData/database.php';
$id=null ; 
if ( !empty($_GET['ActNo'])) {
    $id = $_REQUEST['ActNo'];
}
$sec=null ;
if (  !empty($_GET['SectionNo'])) {
    $sec = $_REQUEST['SectionNo'];
}

if ( null==$id || null==$sec ) {
    header("Location: index.php");
} else {
    $pdo = Database::connect();
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "SELECT * FROM section where ActNo = ? AND SectionNo= ?";
    $q = $pdo->prepare($sql);
    $q->execute(array($id, $sec));
    $data = $q->fetch(PDO::FETCH_ASSOC);
    Database::disconnect();
}
  ?> 
if ( !empty($_GET['ActNo'])) {
    $id = $_REQUEST['ActNo'];
}
$sec = 0;
if ( !empty($_GET['SectionNo'])) {
    $sec = $_REQUEST['SectionNo'];
}

if ( !empty($_POST)) {
    // keep track post values
    $id = $_POST['ActNo'];
    $sec = $_POST['SectionNo'];

    // delete data
    $pdo = Database::connect();
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "DELETE FROM section  WHERE ActNo = ? AND SectionNo = ?";
    $q = $pdo->prepare($sql);
    $q->execute(array($id, $sec));
    Database::disconnect();
    header("Location: index.php");

}
   ?>