2015-05-05 40 views
2

我希望有人可以帮助我使用此代码,因为它花了我几周的时间,我现在已经接近挂断我自己了。需要帮助让我的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); 
} 

现在给了我一个致命的错误说未定义的方法(FETCH_ASSOC)但是我已经检查,我知道mysqlnd安装在服务器上。

看来,foreach语句是去最好的一个,但我不能得到它的循环正常,可以有人请请帮助

+0

你能分享print_r的一部分吗? – Kuzgun

+0

不多看,它只是说第一行的第一个字母“M”,即“Manual”,但这里prntscr.com/71wib5 – thePHPnoob

+0

忘了说是用print_r($ row1 [“DocType”]在foreach循环中 – thePHPnoob

回答

1

有很多的东西,可能是你的代码错误。可能它必须处理“CustomQuery”函数返回的内容。我们无法访问您的计算机并辨别出该函数的功能是什么,但它必须是坏的,因为除了一串sql之外,您甚至没有任何参数,这意味着任何数据库连接都必须由全局。啊。

你也明显使用基于弃用的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! 

在你的情况,显然你已经发现了一个关键的数组元素不进行内插到您的字符串,所以你开始插,然后在数组元素混合获取你做所有那混乱的连接。你似乎很迷惑,因为你有双引号和单引号,并且在某些情况下,你省略了数组键的单引号。这对于SQL来说很复杂,因为在value语句中使用了单引号来表示您正在使用的字符串常量。

秘诀在于,只需在数组元素周围放置一个块,您就可以在代码中简单明了地插入值。

$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); 
+0

确定所有非常好的点,然后我会记下坐下并刷新你所做的要点,但是你能否拿我的第一个循环代码并告诉我你将如何做,只是一个简单的例子? – thePHPnoob

+0

顺便说一句,你已经划入的第二个代码不是我正在使用的那个,我把它放在那里作为我之前做的一个例子,但现在我正在寻找一个foreach语句 – thePHPnoob

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]')"); 
}