PHP SQL语句不起作用

约翰·舒尔茨

请保持谦虚,我不是PHP开发人员,并且不太熟悉该语言。

我有以下SQL PHP语句:

$SerializedPricingArray = serialize($PricingArray);

$signup_order = $i + 1;

$SQL_Statement = "SELECT IF (EXISTS (SELECT [p].[planname] FROM [package] [p] WHERE [p].[planid] = 10 AND [p].[planname] = '" . $json_post['pricestructure']['tld'][$i]['tld'] . "'), \n"
. "(UPDATE [package] SET [pricing] = '" . $SerializedPricingArray . "', [signup_order] = " . $signup_order . "), \n"
. "(INSERT INTO [package] ([planname], [description], [asset_html], [highlight], [planid], [showpackage], [pricing], [style], [automaticactivation], [allowdirectlink], "
. "[sendwelcome], [stockInfo], [emailTemplate], [bundledProducts], [advanced], [signup_order]) VALUES ('" . $json_post['pricestructure']['tld'][$i]['tld'] . "', '', '', "
. "0, 10, 1, '". $SerializedPricingArray . "', 0, 1, 0, 1, 'a:5:{s:12:\"stockEnabled\";i:0;s:14:\"availableStock\";i:0;s:7:\"soldOut\";i:0;s:13:\"acceptSoldOut\";i:0;s:14:\"showStockLevel\";i:0;}', "
. "35, 'a:3:{s:8:\"optional\";a:0:{}s:8:\"required\";a:0:{}s:7:\"coupons\";a:0:{}}', 'a:3:{s:19:\"autoInitiateTranfer\";s:1:\"1\";s:17:\"enableNamesuggest\";s:1:\"1\";s:14:\"maxNamesuggest\";s:1:\"5\";}', "
. $signup_order . ")));\n";

echo "Working on TLD " . $json_post['pricestructure']['tld'][$i]['tld'] . "\n";
$_NULL = mysqli_query($conn, $SQL_Statement);

当我运行代码时,它会经过它的循环,但对数据库没有任何作用。

我究竟做错了什么?

编辑1

这是上面的代码生成的查询:

SELECT IF (EXISTS (SELECT p.`planname` FROM `package` p WHERE p.`planid` = 10 AND p.`planname` = 'com'), 
    UPDATE `package` SET 
        `pricing`='a:2:{s:7:"taxable";i:0;s:9:"pricedata";a:1:{i:0;a:5:{s:9:"registrar";s:4:"enom";i:1;a:5:{s:6:"period";s:1:"1";s:9:"period_id";s:1:"1";s:5:"price";s:5:"11.99";s:8:"transfer";s:5:"11.99";s:5:"renew";s:5:"11.99";}i:2;a:5:{s:6:"period";s:1:"2";s:9:"period_id";s:1:"2";s:5:"price";s:5:"23.98";s:8:"transfer";s:5:"23.98";s:5:"renew";s:5:"23.98";}i:5;a:5:{s:6:"period";s:1:"5";s:9:"period_id";s:1:"5";s:5:"price";s:5:"59.95";s:8:"transfer";s:5:"59.95";s:5:"renew";s:5:"59.95";}i:10;a:5:{s:6:"period";s:2:"10";s:9:"period_id";s:2:"10";s:5:"price";s:6:"119.90";s:8:"transfer";s:6:"119.90";s:5:"renew";s:6:"119.90";}}}}', 
        `signup_order`=1 
        WHERE `planid`=10 AND `planname`='COM', 
    INSERT INTO `package` (`planname`, `description`, `asset_html`, `highlight`, `planid`, `showpackage`, `pricing`, `style`, `automaticactivation`, `allowdirectlink`, `sendwelcome`, `stockInfo`, `emailTemplate`, `bundledProducts`, `advanced`, `signup_order`) 
    VALUES (
        'com', 
        '', 
        '', 
        0, 
        10, 
        1, 
        'a:2:{s:7:"taxable";i:0;s:9:"pricedata";a:1:{i:0;a:5:{s:9:"registrar";s:4:"enom";i:1;a:5:{s:6:"period";s:1:"1";s:9:"period_id";s:1:"1";s:5:"price";s:5:"11.99";s:8:"transfer";s:5:"11.99";s:5:"renew";s:5:"11.99";}i:2;a:5:{s:6:"period";s:1:"2";s:9:"period_id";s:1:"2";s:5:"price";s:5:"23.98";s:8:"transfer";s:5:"23.98";s:5:"renew";s:5:"23.98";}i:5;a:5:{s:6:"period";s:1:"5";s:9:"period_id";s:1:"5";s:5:"price";s:5:"59.95";s:8:"transfer";s:5:"59.95";s:5:"renew";s:5:"59.95";}i:10;a:5:{s:6:"period";s:2:"10";s:9:"period_id";s:2:"10";s:5:"price";s:6:"119.90";s:8:"transfer";s:6:"119.90";s:5:"renew";s:6:"119.90";}}}}', 
        0, 
        1, 
        0, 
        1, 
        'a:5:{s:12:"stockEnabled";i:0;s:14:"availableStock";i:0;s:7:"soldOut";i:0;s:13:"acceptSoldOut";i:0;s:14:"showStockLevel";i:0;}', 
        35, 
        'a:3:{s:8:"optional";a:0:{}s:8:"required";a:0:{}s:7:"coupons";a:0:{}}', 'a:3:{s:19:"autoInitiateTranfer";s:1:"1";s:17:"enableNamesuggest";s:1:"1";s:14:"maxNamesuggest";s:1:"5";}', 
        1
    )
);

编辑2

我已将代码更改为以下内容:

$StockInfo = "a:5:{s:12:\"stockEnabled\";i:0;s:14:\"availableStock\";i:0;s:7:\"soldOut\";i:0;s:13:\"acceptSoldOut\";i:0;s:14:\"showStockLevel\";i:0;}";
$BundledProducts = "a:3:{s:8:\"optional\";a:0:{}s:8:\"required\";a:0:{}s:7:\"coupons\";a:0:{}}', 'a:3:{s:19:\"autoInitiateTranfer\";s:1:\"1\";s:17:\"enableNamesuggest\";s:1:\"1\";s:14:\"maxNamesuggest\";s:1:\"5\";}";

$SerializedPricingArray = serialize($PricingArray);

$signup_order = $i + 1;

$SQL_Statement = "INSERT INTO package (`planname`, `description`, `asset_html`, `highlight`, `planid`, `showpackage`, `pricing`, `style`, `automaticactivation`, `allowdirectlink`, `sendwelcome`, `stockInfo`, `emailTemplate`, `bundledProducts`, `advanced`, `signup_order`) VALUES ('" . $json_post['pricestructure']['tld'][$i]['tld'] . "', '', '', 0, 10, 1, '". $SerializedPricingArray . "', 0, 1, 0, 1, '" . $StockInfo . "', 35, '" . $BundledProducts . "', " . $signup_order . ") "
    . "ON DUPLICATE KEY UPDATE `package` SET `pricing` = VALUES(`pricing`), `signup_order` = VALUES(`signup_order`) WHERE `planid` = 10 AND `planname` = '" . $json_post['pricestructure']['tld'][$i]['tld'] . "';";

$result = mysql_query($conn, $SQL_Statement);

echo "Working on TLD " . $json_post['pricestructure']['tld'][$i]['tld'] . "\n";
echo $result . "\n\n";

当执行PHP页面时,它“似乎”遍历了所有458条记录,但是当我检查MySQL上的表时,只有原始的58条记录。

还有其他建议吗?

加法1

这是MySQL表结构:

+---------------------+-------------+------+-----+---------+----------------+
| Field               | Type        | Null | Key | Default | Extra          |
+---------------------+-------------+------+-----+---------+----------------+
| id                  | int(11)     | NO   | PRI | NULL    | auto_increment |
| planname            | varchar(45) | NO   |     | NULL    |                |
| description         | text        | NO   |     | NULL    |                |
| asset_html          | text        | NO   |     | NULL    |                |
| highlight           | text        | NO   |     | NULL    |                |
| planid              | int(11)     | NO   |     | 0       |                |
| showpackage         | smallint(6) | NO   |     | 1       |                |
| pricing             | text        | NO   |     | NULL    |                |
| style               | tinyint(4)  | YES  |     | 0       |                |
| automaticactivation | tinyint(4)  | YES  |     | 1       |                |
| allowdirectlink     | tinyint(4)  | NO   |     | 1       |                |
| sendwelcome         | tinyint(4)  | NO   |     | 1       |                |
| stockInfo           | text        | NO   |     | NULL    |                |
| emailTemplate       | smallint(5) | NO   |     | 0       |                |
| bundledProducts     | text        | NO   |     | NULL    |                |
| advanced            | text        | NO   |     | NULL    |                |
| signup_order        | int(11)     | NO   |     | 1       |                |
+---------------------+-------------+------+-----+---------+----------------+
约翰·舒尔茨

终于想出了一个解决方案。如下:

$StockInfo = "a:5:{s:12:\"stockEnabled\";i:0;s:14:\"availableStock\";i:0;s:7:\"soldOut\";i:0;s:13:\"acceptSoldOut\";i:0;s:14:\"showStockLevel\";i:0;}";
$BundledProducts = "a:3:{s:8:\"optional\";a:0:{}s:8:\"required\";a:0:{}s:7:\"coupons\";a:0:{}}', 'a:3:{s:19:\"autoInitiateTranfer\";s:1:\"1\";s:17:\"enableNamesuggest\";s:1:\"1\";s:14:\"maxNamesuggest\";s:1:\"5\";}";

$SerializedPricingArray = serialize($PricingArray);

$signup_order = $i + 1;

$SQL_SELECT_Statement = "SELECT * FROM package WHERE planname='" . $json_post['pricestructure']['tld'][$i]['tld'] . "';";
$SQL_UPDATE_Statement = "UPDATE package SET pricing='" . $SerializedPricingArray . "', signup_order=" . $signup_order . " WHERE planid=10 AND planname='" . $json_post['pricestructure']['tld'][$i]['tld'] . "';";
$SQL_INSERT_Statement = "INSERT INTO package (`planname`, `description`, `asset_html`, `highlight`, `planid`, `showpackage`, `pricing`, `style`, `automaticactivation`, `allowdirectlink`, `sendwelcome`, `stockInfo`, `emailTemplate`, `bundledProducts`, `advanced`, `signup_order`) VALUES ('" . $json_post['pricestructure']['tld'][$i]['tld'] . "', '', '', '0', 10, 1, '". $SerializedPricingArray . "', 0, 1, 0, 1, '" . $StockInfo . "', 35, '" . $BundledProducts . "', " . $signup_order . ")";

echo "Working on TLD " . $json_post['pricestructure']['tld'][$i]['tld'] . "\n";

$result = mysqli_query($conn, $SQL_SELECT_Statement);

if (mysqli_num_rows($result) > 0 ) {
    echo "Updating " . $json_post['pricestructure']['tld'][$i]['tld'] . " . . . .\n\n";
    $result2 = mysqli_query($conn, $SQL_UPDATE_Statement);
} else {
    echo "Inserting " . $json_post['pricestructure']['tld'][$i]['tld'] . " . . . .\n\n";
    $result2 = mysqli_query($conn, $SQL_INSERT_Statement);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章