это моя проблема: я хочу поставить этот запрос в процедуру хранения:
выберите col1, col2 из var1, где site_cluster = var2;
Я создаю процедуру следующим образом:
delimiter $$
drop procedure if exists get_register$$
CREATE procedure get_registers(IN var1 VARCHAR(15),IN var2 VARCHAR(15))
BEGIN
DECLARE l_sql_stmt varchar (100);
SET @l_sql_stmt = CONCAT('SELECT col1,col2 from ',var1," where site_cluster='",var2,"'");
SELECT @l_sql_stmt;
prepare stmt from @l_sql_stmt;
execute stmt;
END $$
DELIMITER ;
И из php я делаю:
###connection to db is defined in other class####
$query = "call get_registers('var1','var2')";
if($result = $this->connection->query($query)){
while($row = $result->fetch_array()){
$register_array[$row['col1']]['col2']=$row['col1'];
$register_array[$row['col1']]['col2']=$row['col2'];
}
return $register_array;
}
Итак... при выполнении вызова get_enbs ('var1', 'var2'); он работает из mysql cli, я не могу заставить его работать с php. любые идеи были бы хорошими. Благодарю.
есть несколько причин, почему "звонок" не работает.
Чаще всего вы забыли поставить поддержку нескольких операторов в свою функцию mysql_connect. как это:
$this-> connection = mysql_connect ($this-> хост, $this-> пользователь, $this-> passw, false, 65536);
это непосредственно из документации вызова mysql https://dev.mysql.com/doc/refman/5.7/en/call.html
Это связано с тем, что каждый CALL возвращает результат для указания статуса вызова в дополнение к любым наборам результатов, которые могут быть возвращены операциями, выполненными в рамках процедуры
Вы также можете попробовать
Exec get_registers ('var1', 'var2')
вместо этого, если выше не работает.
SELECT get_registers('var1','var2');