Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.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将行插入MSSQL?_Php_Sql_Sql Server - Fatal编程技术网

如何使用查找表通过PHP将行插入MSSQL?

如何使用查找表通过PHP将行插入MSSQL?,php,sql,sql-server,Php,Sql,Sql Server,我正在创建一个web应用程序,其中一个数据库接口需要一个查找表。这是执行SQL的部分: $A = $_POST['A']; $B = $_POST['B']; $tsql= "INSERT INTO INSERT_TABLE ( A, B_Index) VALUES (?, ?)"; $var = array($A, $B); 我的问题是,我不想插入B本身的值,而是在查找表中插入该值的索引。我试图

我正在创建一个web应用程序,其中一个数据库接口需要一个查找表。这是执行SQL的部分:

$A = $_POST['A'];
$B = $_POST['B'];

$tsql= "INSERT INTO INSERT_TABLE (
            A,
            B_Index)
            VALUES
            (?, ?)";
$var = array($A, $B);
我的问题是,我不想插入B本身的值,而是在查找表中插入该值的索引。我试图将值行与表连接起来,但MSSQL似乎不喜欢这样。有什么想法吗

编辑:查找表的格式为:

index | value
-------------
   1  |  horse
   2  |   cow
  ... |  ...
如果$B=='horse',我想插入2而不是'horse'

EDIT2:我尝试了这个查询,但不幸的是它不起作用,但它显示了我想要做的事情:

INSERT INTO INSERT_TABLE (A, B_Index)
VALUES 
SELECT temp.A, LT.index
FROM (A,B) temp
INNER JOIN LOOKUP_TABLE LT
ON LT.value = temp.B

您可以在INSERT语句中包含SELECT和FROM子句。这允许您将记录从查找表拉入插入表

示例

INSERT INTO INSERT_TABLE
    (
        A,
        B
    )
SELECT
    ?,
    lt.Value
FROM
    LOOKUP_TABLE AS lt
WHERE
    lt.Index = ?
;    

编辑:我真的应该强调上面的代码是伪代码。在实践中,问号应替换为值。有关这方面的更多信息,请参见下面@Terminus的评论。

能否请您进一步澄清您的疑问……我添加了一些额外的信息。这是澄清了问题,还是还不清楚?每次在第二栏开头有“B”时,我都不太明白你的意思。查找表实际上没有值b1、b2等,这些只是占位符变量。您想插入“2”来代替“horse”的含义是什么?看起来像我需要的,但似乎MS SQL不喜欢这个值?在代码中。它是某种通配符变量吗?我将尝试为MS SQL查找类似的内容。我已将?作为变量的占位符包含在内。您需要从PHP参数化这些参数。@BallzofFury这是一个通配符。如果使用预先准备好的语句,则可以在执行查询时传递一个变量数组,该数组将正常工作。显示您的php代码以获得更详细的答案。@Terminus,对不起,我没有用php来思考。我对这些通配符很熟悉,经过一点工作,我已经在代码中正常运行了。谢谢!