Eu procurei na net e até agora o que eu tenho visto é que você pode usar mysql_
e mysqli_
juntos o que significa:
<?php
$con=mysqli_connect("localhost", "root" ,"" ,"mysql");
if( mysqli_connect_errno( $con ) ) {
echo "failed to connect";
}else{
echo "connected";
}
mysql_close($con);
echo "Done";
?>
ou
<?php
$con=mysql_connect("localhost", "root" ,"" ,"mysql");
if( mysqli_connect_errno( $con ) ) {
echo "failed to connect";
}else{
echo "connected";
}
mysqli_close($con);
echo "Done";
?>
São válidos, mas quando uso este código o que recebo é:
Connected
Warning: mysql_close() expects parameter 1 to be resource, object given in D:\************.php on line 9
Done
Para o primeiro e o mesmo, exceto com mysqli_close()
. Para o segundo.
Qual é o problema? Não posso usar mysql_
e mysqli
junto? Ou isso é normal? Posso verificar se as conexões são válidas? (o if(mysq...)
)
mysql_*
funções completamente. Eles estão sujeitos a erros e inseguros, e serão removidos do PHP em breve (eles estão marcados como obsoletos no momento). [Esta ótima resposta] [0] entra em detalhes explicando por que eles são ruins. [0]: stackoverflow.com/a/12860046/1055295mysqli_*
funções e código bom commysql_*
algumas. Mas a última categoria está marcada como obsoleta por ser o conjunto inferior de funções, não sendo capaz de suportar invocações estilo OO ou mesmo instruções preparadas (para citar apenas dois exemplos). Dada a escolha de duas ferramentas para fazer o mesmo trabalho, uma das quais é claramente melhor no longo prazo e mais flexível, a resposta correta não é óbvia?Respostas:
Não, você não pode usar
mysql
emysqli
junto. Eles são APIs separados e os recursos que eles criam são incompatíveis uns com os outros.Existe um
mysqli_close
, no entanto.fonte
Apenas para dar uma resposta geral aqui sobre todas as três APIs MYSQL com uma referência:
Você não pode misturar qualquer um dos três (
mysql_*
,mysqli_*
,PDO
) MYSQL API do do PHP juntos, ele simplesmente não funciona. Está até no manual de FAQ :Você precisa usar a mesma API MySQL e suas funções relacionadas, desde a conexão até a consulta.
fonte
mysql_real_escape_string()
com o que o resto de seu código é PDO. Há algo que eu não entendi aqui trabalhando com essas diferentes APIs? Eu sou o ignorante aqui? Isso sendo para a questão "agora excluído" stackoverflow.com/q/34209127 visível apenas por 10K + membros, caso alguém se pergunte. Isso em relação a$stmt3->execute(array('classID' => $_POST['class'],'studentID' => mysql_real_escape_string($substr)))
- Estou faltando alguma coisa aqui?mysql_real_escape_string()
vai silenciosamente tentar fazer uma conexão com os parâmetros padrão que então trabalhavam para OP. Então, ele apenas fez a conexão para obter o conjunto de caracteres. O OP tem 2 conexõesini_get()
. Portanto, provavelmente funciona apenas para OP com as configurações padrão. Eu deixaria e pegaria um café novo (☕☕☕).sqlsrv_query()
. Acabei de fechar uma pergunta aqui stackoverflow.com/q/41263771Tecnicamente, você pode usar quantas conexões separadas desejar, enquanto o problema é causado por um mero erro de digitação - você só não pode usar recursos de uma extensão com funções de outra, o que é bastante óbvio.
No entanto, você deve evitar várias conexões do mesmo script , não importa de API única ou diferentes. Isso vai sobrecarregar seu servidor de banco de dados e esgotar seus recursos. Portanto, embora tecnicamente você possa, você não deve misturar extensões diferentes em seu código, exceto pelo curto período de refatoração.
fonte
MySQLi
é muito mais seguro do que oMySQL
que agora está obsoleto. É por isso que você deve ficar comMySQLi
e também não pode misturá-los, pois são diferentes.fonte