Php 需要帮助让我的ForEach查询正常工作吗
我希望有人能帮我解决这个问题,因为我花了好几个星期的时间,现在我几乎要绞死自己了 首先,我有两张桌子: 表1,DynamicDocType DocTypePK,(AI主键) DocType(文档名-Varchar) 和表2, DocTypePk(AI-pk) CompanyFk(外键,见下一段) DocType,文档名称-Varchar) 我试图在添加新客户机时使用一个php事件,它查找主表(表1),并用一组完整的记录填充子表。目前,主表包含7项记录:手册、政策、程序、流程、工作说明、指南和表格 我尝试使用的代码如下所示:Php 需要帮助让我的ForEach查询正常工作吗,php,mysql,foreach,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]')");
}
然而,这不起作用,当我打印时,它所做的一切要么是每行的第一个字母,要么只是第一行的第一个字母,即“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语句似乎是最好的,但我无法让它正确循环,请有人帮忙,你的代码可能有很多问题。这可能与“CustomQuery”函数返回的内容有关。我们无法进入您的计算机并识别该函数是什么或是做什么的,但它必须是坏的,因为您除了一个sql字符串之外没有任何参数,这意味着任何数据库连接都必须由全局函数驱动。啊 显然,您也在使用基于不推荐的mysql_uuAPI的东西 然而,您可能需要帮助的主要问题是,您似乎不了解插入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);
为了防止有人再次遇到此问题,我使用以下代码设法使我的函数正常工作:
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]')");
}
你能分享打印部分吗?没什么可看的,它只是说“M”,这是第一行的第一个字母,即“Manual”,但这里prntscr.com/71wib5忘了说它正在使用打印($row1[“DocType”]在foreach循环中,所有的要点都很好,我会记下,坐下来温习一下你的要点,但是你能拿我的第一个循环代码,告诉我你会怎么做吗,只是一个简单的例子?顺便说一句,你在上面划分的第二个代码,不是我正在使用的,我把它放在那里,作为我之前所做的示例对此,但现在我正在寻找foreach声明