在PHP中动态创建的数组中转义撇号

在PHP中动态创建的数组中转义撇号,php,arrays,escaping,Php,Arrays,Escaping,我正在做一个项目,在PostgreSQL数据库中混合许多不同的数据集。我仍然认为自己是一个具有PHP开发和脚本编写能力的初学者。我在数组中避开撇号时遇到了一些实际问题。我在这些论坛上尝试了几种不同的解决方案:,,最后在这里。我目前正在尝试用PDO版本重新创建脚本,这样我就不必清理我的文本。至少从我所做的所有研究来看,这是一个更好的方法。我目前正在寻找的是一种逃避角色的方法,同时我找到了一个更雄辩的解决方案。以下是我在导入过程中使用的主要代码: <?php include('connec

我正在做一个项目,在PostgreSQL数据库中混合许多不同的数据集。我仍然认为自己是一个具有PHP开发和脚本编写能力的初学者。我在数组中避开撇号时遇到了一些实际问题。我在这些论坛上尝试了几种不同的解决方案:,,最后在这里。我目前正在尝试用PDO版本重新创建脚本,这样我就不必清理我的文本。至少从我所做的所有研究来看,这是一个更好的方法。我目前正在寻找的是一种逃避角色的方法,同时我找到了一个更雄辩的解决方案。以下是我在导入过程中使用的主要代码:

<?php


include('connect_local.php'); //Includes DB Connection Script
ini_set('max_execution_time', 3000); //3000 seconds = 50 minutes

$emp_get = "SELECT * FROM table1 WHERE person_type LIKE 'Employee'";
$emp_data = pg_query($conn, $emp_get);
while ($emp_row=pg_fetch_array($emp_data)) {


$oraint_get = "SELECT * FROM table2 WHERE source_enrollment_status_name LIKE  'Attended' AND employee_number LIKE '$emp_row[0]' ";
$oraint_data = pg_query($conn, $oraint_get);
$oraint_lms = "Oracle Learning Management Platform";
$oranull = "";


//foreach ($oraint_row as $oraint)
while ($oraint_row = pg_fetch_array($oraint_data)){




    $data_deposit = "INSERT INTO EDU_DATA (person_number, person_name, preferred_name, person_type, start_date, original_date_of_hire
                                 ,hire_date, email_address, region, location, gender, job_name, cbs_level, supervisor_employee_number
                                 ,supervisor_name, supervisor_person_type, business_unit, organization_2, organization_3, effective_date
                                 ,completion_date, training_item_code, days_on_to_do_list, days_overdue, initial_due_in, initial_due_in_unit 
                                 ,retraining_due_in, retraining_due_in_unit, retraining_period, retraining_period_unit 
                                 ,curriculum_code, curriculum_title, learning_course_name, learning_activity, class_duration, college, delivery_method_name
                                 ,class_location_name, class_location_country_name, learning_category, source_enrollment_status_name, lms_platform
                                 ,supervisor_1 ,supervisor_2, supervisor_3, supervisor_4, supervisor_5, supervisor_6, supervisor_7, supervisor_8) 
                          VALUES ('$emp_row[0]','$emp_row[1]','$emp_row[2]','$emp_row[4]','$emp_row[5]','$emp_row[6]','$emp_row[8]'
                                  ,'$emp_row[9]','$emp_row[16]','$emp_row[17]','$emp_row[19]','$emp_row[21]','$emp_row[22]','$emp_row[28]'
                                  ,'$emp_row[29]','$emp_row[30]','$emp_row[33]','$emp_row[44]','$emp_row[45]','$oraint_row[2]','$oraint_row[3]'
                                  ,'$oranull','$oranull','$oranull','$oranull','$oranull','$oranull','$oranull','$oranull','$oranull','$oranull'
                                  ,'$oranull','$oraint_row[4]','$oraint_row[5]','$oraint_row[6]','$oraint_row[7]','$oraint_row[8]','$oraint_row[9]'
                                  ,'$oraint_row[10]','$oraint_row[11]','$oraint_row[12]','$oraint_lms','$emp_row[46]','$emp_row[47]','$emp_row[48]'
                                  ,'$emp_row[49]','$emp_row[50]','$emp_row[51]','$emp_row[52]','$emp_row[53]')";
    pg_query($conn, $data_deposit);
我还尝试使用我在这里找到的示例创建一个递归处理此问题的函数:。代码片段如下所示:

 function escapeApos(array $emp_row)
{

    $return_array = [];
    array_walk_recursive($emp_row, function($x) use (&$return_array)
    {

        $return_array[] = str_replace("'","\\'",$x);

    }   

    return $return_array;
}

我还尝试了其他一些方法,但没有成功。任何援助都将不胜感激。同样,对于上面的函数,我不确定是否需要声明数组中我想要清理的实际列。再次欢迎任何帮助!提前谢谢你

好的,非常感谢大家帮助我!我开始使用PDO而不是我采用的第一种方法重新创建脚本。这是脚本的一个示例,我还有一些工作要做。然而,现在我正在使用PDO,清理文本的问题已经不是问题了。从现在起我要用这个方法

<?php

include('connect_local_pdo.php'); //Includes DB Connection Script
ini_set('max_execution_time', 3000); //3000 seconds = 50 minutes

try {
    $stmt = $conn->query('SELECT * FROM table1');
    $rows = $stmt->setFetchMode(PDO::FETCH_ASSOC);

    while ($rows = $stmt->fetch()) {

        $emp_id = $rows['person_number'];

        $stmt2 = $conn->query("SELECT * FROM table2 WHERE employee_number LIKE '$emp_id'");
        $oracleint = $stmt2->setFetchMode(PDO::FETCH_ASSOC);

        while ($oracleint = $stmt2->fetch()) {



            $GO = $conn->prepare("INSERT INTO table3 (person_number, person_name, learning_course_name) VALUES (:emp_number, :emp_name, :learning_course_name)");

            $GO->bindParam(':emp_number', $rows['person_number']);
            $GO->bindParam(':emp_name', $rows['person_name']);
            $GO->bindParam(':learning_course_name', $oracleint['learning_course_name']);

            $GO->execute();

        }


        }

    } catch (PDOException $b) {
        echo 'Data Extraction Failed: ' . $b->getMessage();

    }

您是否尝试过
mysqli\u real\u escape\u string()
?该表看起来应该是五个表。我不知道PDO,但您必须规范该数据库并绑定/清理插入查询,它将自动为您执行该操作。我想,但我知道数据操作正在PostgreSQL数据库上进行。我确实查找了我认为是PostgreSQL版本的内容,并得到了以下错误消息:“pg_query():query failed:error:”这是我尝试的代码片段:$data=$emp_row[1]$cln_name=pg_escape_字符串($data);使用准备好的语句,而不是替换变量。请参阅
pg_prepare()
pg_execute()
,或使用PDO。
<?php

include('connect_local_pdo.php'); //Includes DB Connection Script
ini_set('max_execution_time', 3000); //3000 seconds = 50 minutes

try {
    $stmt = $conn->query('SELECT * FROM table1');
    $rows = $stmt->setFetchMode(PDO::FETCH_ASSOC);

    while ($rows = $stmt->fetch()) {

        $emp_id = $rows['person_number'];

        $stmt2 = $conn->query("SELECT * FROM table2 WHERE employee_number LIKE '$emp_id'");
        $oracleint = $stmt2->setFetchMode(PDO::FETCH_ASSOC);

        while ($oracleint = $stmt2->fetch()) {



            $GO = $conn->prepare("INSERT INTO table3 (person_number, person_name, learning_course_name) VALUES (:emp_number, :emp_name, :learning_course_name)");

            $GO->bindParam(':emp_number', $rows['person_number']);
            $GO->bindParam(':emp_name', $rows['person_name']);
            $GO->bindParam(':learning_course_name', $oracleint['learning_course_name']);

            $GO->execute();

        }


        }

    } catch (PDOException $b) {
        echo 'Data Extraction Failed: ' . $b->getMessage();

    }