我做了另一个非常基本的插入查询,我想只插入一行3列。
public static function execute($params = null) // this is in my orm class, it does not extends or implements dpo or others so execute is not overrided
{
try
{
self::processParams($params);
self::$stmt = self::$mysql_conn->prepare(self::$query);
self::$stmt->execute(self::$bind_params);
return self::$mysql_conn->lastInsertId();
}
catch (PDOExecption $e)
{
$dbh->rollback();
return false;
}
}
用这个qúery:
private $add_pcategory = "INSERT INTO pcategories (id, name, active) VALUES (NULL, :name, :active)";
我有更多这样的查询,并且它们都使用相同的执行函数正常工作。
我找不到它的错误..用echo回答“嘿!” before ->execute()
它不打印两次。所以执行只加载一次。
调用插入符号:
<?php
/**
* Description of products
*
* @author (c) erik
*/
/* TODO finish it, clean up, optimize and remove unused */
class products extends system
{
/* That was hard to write */
/* TODO create needed db tables */
private $add_quantity = "INSERT INTO quantity (id, itemtype, itemid, quantity) VALUES (NULL, :itemtype, :itemid, :quantity)";
//Done
// Product image
private $add_image = "INSERT INTO tppimages (id, image, product) VALUES(NULL, :image, :product)";
private $get_image = "SELECT * FROM tppimages WHERE image=:image AND product=:product";
private $delete_image = "";
// Product
private $add_product = "INSERT INTO products (id, type, active) VALUES (NULL, :type, :active)";
private $get_product = "SELECT p.*, pd.descr, pd.name, pd.price, pd.short, pd.size, pd.weight, GROUP_CONCAT(DISTINCT img.filename ORDER BY img.filename) AS images, GROUP_CONCAT(DISTINCT vid.videoid ORDER BY vid.videoid) AS videos FROM products p LEFT JOIN product_data pd ON (p.id = pd.id) LEFT JOIN tppimages pi ON (p.id = pi.product) LEFT JOIN images img ON (img.id = pi.image) LEFT JOIN tppvideos pv ON (p.id = pv.product) LEFT JOIN videos vid ON (vid.id = pv.video) WHERE p.id=:id AND p.type=:type AND p.active=:active ORDER BY p.id DESC";
private $delete_product = "";
private $get_products = "SELECT p.*, pd.name, pd.price, pd.short, pd.size, pd.weight, GROUP_CONCAT(DISTINCT img.filename ORDER BY img.filename) AS images FROM products p LEFT JOIN product_data pd ON (p.id = pd.id) LEFT JOIN tppimages pi ON (p.id = pi.product) LEFT JOIN images img ON (img.id = pi.image) WHERE p.type=0 AND p.active=1 GROUP BY p.id ORDER BY p.id DESC LIMIT :from,:to";
private $get_products_by_category = "SELECT p.*, pd.name, pd.price, pd.short, pd.size, pd.weight, tppc.pcategory, GROUP_CONCAT(DISTINCT img.filename ORDER BY img.filename) AS images FROM products p LEFT JOIN product_data pd ON (p.id = pd.id) LEFT JOIN tppimages pi ON (p.id = pi.product) LEFT JOIN images img ON (img.id = pi.image) LEFT JOIN tppcategories tppc ON (p.id = tppc.product) LEFT JOIN pcategories pc ON (pc.id = tppc.pcategory) WHERE p.type=0 AND p.active=1 AND tppc.pcategory=:category GROUP BY p.id ORDER BY p.id DESC LIMIT :from,:to";
private $add_product_data = "INSERT INTO product_data (id, name) VALUES (:id, :name)";
private $add_to_pcategory = "INSERT INTO tppcategories (id, pcategory, product) VALUES (:id, :pcategory, :product)";
// Sub product
private $add_subproduct = "INSERT INTO tpproducts (id, mainprod, subprod) VALUES (NULL, :mainprod, :subprod)";
private $get_subproducts = "SELECT pd.* FROM tpproducts tpps JOIN product_data pd ON (tpps.subprod = pd.id) WHERE tpps.mainprod=:id";
private $delete_subproduct = "DELETE FROM tpproducts WHERE mainprod=:mainprod AND subprod=:subprod";
// Product categories
private $delete_pcategories = "DELETE FROM pcategories WHERE id=:id";
private $add_pcategory = "INSERT INTO pcategories (id, name, active) VALUES (NULL, :name, :active)";
private $get_pcategory = "SELECT * FROM pcategories WHERE id=:id";
private $is_pcategory = "SELECT * FROM pcategories WHERE name=:name";
/* DOTO add category images */
private $get_categories = "SELECT c.* FROM pcategories c ORDER BY c.name ASC";
/**
*
* @param type $xhr boolean, means that module was loaded from ajax request to be able to avoid loading templates
*/
public function init($xhr = false) /* TODO add access level */
{
if (!$xhr)
{
// $this->addProductImages(6, array("1", "2", "3"));
$this->addProductCategory("Tepelné kamery"); //Here i am testing it,
/* $this->addProductCategory("Ultrazvukové");
$this->addProductCategory("Testovacie");
$this->addProductCategory("Údené klobásy");
* */
$this->initTpl("header.tpl");
$this->initTpl("top_panel.tpl");
$this->initTpl("left_panel.tpl");
$this->loadTemplate();
$this->initTpl("right_panel.tpl");
$this->initTpl("bottom_panel.tpl");
$this->initTpl("footer.tpl");
}
else
{
}
}
// <editor-fold defaultstate="collapsed" desc=" product ">
public function getProducts($category = null)
{
$pDTO = new pDTO();
$pDTO->setActive(true);
$pDTO->setCategory($category);
return orm::getInstance()->setQuery((is_null($category) ? $this->get_products : $this->get_products_by_category))->setDto($pDTO)->select(array("from" => "0", "to" => "30"));
}
public function getProduct($prodid)
{
$pDTO = new pDTO();
$pDTO->setId($prodid);
$pDTO->setActive(true);
$pDTO->setType("0");
return orm::getInstance()->setQuery($this->get_product)->setDto($pDTO)->select();
}
public function updateProduct()
{
}
public function addProduct()
{
$pDTO = new pDTO();
$pDTO->setActive(true);
$pDTO->setType("1");
$pDTO->setName("Hello product");
$result = orm::getInstance()->setQuery($this->add_product)->setDto($pDTO)->execute();
if ($result != false)
{
$pDTO->setId($result);
$result = orm::getInstance()->setQuery($this->add_product_data)->setDTO($pDTO)->execute();
}
}
public function getProductItems($prodid)
{
$pDTO = new pDTO();
$pDTO->setId($prodid);
$pDTO->setActive(true);
$pDTO->setType("1");
return orm::getInstance()->setQuery($this->get_subproducts)->setDto($pDTO)->select();
}
public function addSubProducts($items)
{
}
public function addSubProduct($id)
{
$pDTO = new pDTO();
$pDTO->setActive(true);
$pDTO->setMainprod($id);
$pDTO->setType("1");
$pDTO->setName("Ethernet kápel");
$pDTO->setShort("50 metrov");
$subprod_id = orm::getInstance()->setQuery($this->add_product)->setDto($pDTO)->execute();
if ($subprod_id != false)
{
$pDTO->setSubprod($subprod_id);
$tpprod_id = orm::getInstance()->setQuery($this->add_subproduct)->setDTO($pDTO)->execute();
if ($tpprod_id == false)
{
//delete subprod here
}
}
}
public function addProductItemQuantity($item, $quantity)
{
$qyDTO = new qyDTO();
$qyDTO->setItemid($item);
$qyDTO->setItemtype("1");
$qyDTO->setQuantity($quantity);
return orm::getInstance()->setQuery($this->add_quantity)->setDto($qyDTO)->execute();
}
// </editor-fold>
//
// <editor-fold defaultstate="collapsed" desc=" Product Category ">
public function getProductCategories()
{
$pcDTO = new pCategoryDTO();
return orm::getInstance()->setQuery($this->get_categories)->setDto($pcDTO)->select();
}
public function addProductCategory($categoryname)
{
$pcDTO = new pCategoryDTO();
$pcDTO->setName($categoryname);
/* TODO comment out when, query for single row insert will not insert 2 rows */
// $exists = orm::getInstance()->setQuery($this->is_pcategory)->setDto($pcDTO)->select();
// if ($exists == false)
// {
$pcDTO->setActive(true);
return orm::getInstance()->setQuery($this->add_pcategory)->setDto($pcDTO)->execute();
// }
}
public function deleteProductCategory()
{
}
// </editor-fold>
public function addProductImages($product, $images)
{
$tppiDTO = new tppimagesDTO();
$tppiDTO->setProduct($product);
foreach ($images as $image)
{
$tppiDTO->setImage($image);
$exists = orm::getInstance()->setQuery($this->get_image)->setDto($tppiDTO)->select();
if ($exists == false)
{
orm::getInstance()->setQuery($this->add_image)->setDto($tppiDTO)->execute();
}
}
}
public function updateProductImage()
{
}
public function deleteProductImage()
{
}
public function addProductVideo()
{
}
public function updateProductVideo()
{
}
public function deleteProductVideo()
{
}
private function loadTemplate()
{
if (!$this->getGet("identifier") && !$this->getGet("category"))
{
$this->assignVar("pccategories", $this->getProductCategories());
$this->initTpl("products_categories.tpl");
}
elseif ($this->getGet("category"))
{
$this->assignVar("products", $this->getProducts($this->getGet("category")));
$this->initTpl("product_list.tpl");
}
else
{
$this->assignVar("productitems", $this->getProductItems($this->getGet("identifier")));
$this->assignVar("products", $this->getProduct($this->getGet("identifier")));
$this->initTpl("product.tpl");
}
}
}
这是我的ORM模块,一切都在发生。
<?php
/**
* Description of orm
*
* @author (c) erik
*/
class orm extends kernel
{
private static $instance, $bind_params, $bind_params_custom, $fields, $attrs, $imp_arr, $query;
public static $stmt, $mysql_conn;
/* TODO complete cleanup for new logic */
public static function execute($params = null)
{
try
{
self::processParams($params);
self::$stmt = self::$mysql_conn->prepare(self::$query);
self::$stmt->execute(self::$bind_params);
return self::$mysql_conn->lastInsertId();
}
catch (PDOExecption $e)
{
$dbh->rollback();
return false;
}
}
public static function select($params = null)
{
try
{
self::processParams($params);
self::$stmt = self::$mysql_conn->prepare(self::$query);
self::$stmt->execute(self::$bind_params);
return self::$stmt->fetchAll(PDO::FETCH_ASSOC);
}
catch (PDOExecption $e)
{
return false;
}
}
private static function processParams($params)
{
foreach (self::$fields as $key => $value)
{
if (strpos(self::$query, ":{$key}"))
{
self::$bind_params[$key] = $value;
}
}
if (!is_null($params))
{
foreach ($params as $key => $value)
{
self::$bind_params_custom[$key] = $value;
}
self::$bind_params = array_merge(self::$bind_params, self::$bind_params_custom);
}
}
public static function delete($pdo)
{
self::setDto($pdo);
}
// <editor-fold defaultstate="collapsed" desc=" set, construct, instance, destruct ">
public static function setDto($dto)
{
self::$fields = get_object_vars($dto);
return self::$instance;
}
public static function setQuery($query)
{
self::$query = $query;
return self::$instance;
}
public static function getInstance()
{
if (is_null(self::$instance))
{
self::$instance = new orm();
}
self::$bind_params = array();
self::$imp_arr = array();
self::$bind_params_custom = array();
self::$query = "";
return self::$instance;
}
function __construct()
{
self::$attrs = array(PDO::ATTR_PERSISTENT => true, PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
self::$mysql_conn = new PDO("mysql:host=" . self::$config["mysql"]["host"] . ";port=" . self::$config["mysql"]["port"] . ";dbname=" . self::$config["mysql"]["database"] . "", self::$config["mysql"]["username"], self::$config["mysql"]["password"], self::$attrs);
}
function __destruct()
{
}
// </editor-fold>
}
我无法想象什么是错的,添加产品作品,添加图片作品,添加pcategory插入2行而不是1行。
如果您不想搜索整个代码,请搜索:addProductCategory($categoryname)
。
谢谢。
答案 0 :(得分:1)
我在启动时禁用了mysql start,手动重新启动,现在可以正常工作:D