需要帮助让我的ForEach查询工作

时间:2015-05-05 18:48:40

标签: php mysql foreach

我希望有人可以帮我解决这个问题,因为它花了我几个星期的时间,我现在已经接近自己了。

首先我有两张桌子: 表1,DynamicDocType     DocTypePK,(AI主键)     DocType(文档名称 - Varchar)

表2,     DocTypePk,(AI pk)     CompanyFk,(外键,见下段)     DocType,文档名称 - Varchar)

我在添加新客户端时尝试使用php事件,查找主表(表1),并使用完整的记录集填充子表。目前,主表包含7个记录,手册,政策,程序,流程,工作指导,指导和表格。

我尝试使用的代码如下:

$rs10 = CustomQuery("SELECT DocType as DocType FROM DynamicDocType");
$data10 = db_fetch_array($rs10);
foreach($data10 as $row1)
    {
        CustomQuery("INSERT INTO CompanyDocType (CompanyFk, DocType) values  ('".$values["CompanyPk"]."', '$row1[DocType]')");
    }

然而这不起作用,当我执行print_r时,它所做的只是每行的第一个字母,或者只是第一行的第一个字母,即" M"并停在那里。

这让我感到困惑,因为我以前在完全相同的平台,软件等上运行类似的代码:

$sql5 = "SELECT * FROM global_doctypes";
$rs5 = CustomQuery($sql5); 
$results5 = $rs5;
while ($row = $results5->fetch_assoc())
{
$sql6 = "INSERT INTO documents_doctypes (companyfk, doctype, doctypeID, doctypeabv) values
 ('".$values["companypk"]."', '$row[doctype]', '$row[doctypepk]', '$row[doctypeabv]')";CustomQuery($sql6);
}

现在给我一个致命的错误,说Undefined方法(对于fetch_assoc),但是我已经检查过,我知道mysqlnd安装在服务器上。

似乎foreach声明是最好的声明,但我不能让它正常循环,有人可以请帮助

2 个答案:

答案 0 :(得分:1)

您的代码可能存在许多问题。可能,它与" CustomQuery"功能返回。我们无法进入您的计算机并识别该功能是什么或做什么但它必须是坏的,因为您甚至没有除sql字符串之外的任何参数,这意味着任何数据库连接必须是由Globals推动。啊。

你显然也在使用基于弃用的mysql_ api的东西。

然而,你可以使用帮助的主要事情是,你似乎并不理解插入php字符串的良好清晰方法。我希望这会帮助你清理一下你的代码。

这里有你所拥有的:

$sql6 = "INSERT INTO documents_doctypes (companyfk, doctype, doctypeID, doctypeabv) values ('".$values["companypk"]."', '$row[doctype]', '$row[doctypepk]', '$row[doctypeabv]')";
CustomQuery($sql6);

在这种情况下,您使用的是php插值方法来定义字符串:

$sql = "....";

通过插值,嵌入在字符串中的变量将在运行时解析。

$foo = 'Loki';
$greeting = "Hello $foo!";
echo $greeting;
// You get Hello Loki!

使用单引号创建字符串常量。

$foo = 'Loki';
$greeting = 'Hello $foo!';
echo $greeting;
// You get Hello $foo!

在你的情况下,显然你已经发现一个带有键的数组元素没有插入到你的字符串中,所以你要开始插值,然后混合你所做的所有数组元素那种凌乱的连接。您似乎很困惑,因为您有双引号和单引号,在某些情况下,您省略了数组键的单引号。这很复杂,因为在语句中使用单引号来表示您正在使用的字符串常量。

秘诀是,只需在数组元素周围放置一个块{},您就可以在代码中简单而清晰地插入值。

   $sql6 = "INSERT INTO documents_doctypes (companyfk, doctype, doctypeID, doctypeabv) values ('{$values['companypk']}', '{$row['doctype']}', '{$row['doctypepk']}', '{$row[doctypeabv]}')";
CustomQuery($sql6); 

我还要质疑companyfk的数据类型。如果这是一个整数值,那么你不应该在它周围放置单引号,因为它不是字符串,而是数字类型。

$sql6 = "INSERT INTO documents_doctypes (companyfk, doctype,   doctypeID, doctypeabv) values ({$values['companypk']}, {$row['doctype']}', '{$row['doctypepk']}', '{$row[doctypeabv]}')";
CustomQuery($sql6); 

答案 1 :(得分:0)

万一有人再次遇到这个问题,我设法使用以下代码让我的功能正常工作:

global $dal;
$tblDynamicDocType = $dal->Table("DynamicDocType");
$rs10 = $tblDynamicDocType->QueryAll();
while ($data10 = db_fetch_array($rs10))

{
    CustomQuery("INSERT INTO CompanyDocType (CompanyFk, DocType) values  ('".$values["CompanyPk"]."', '$data10[DocType]')");
}